c語言指標總結

2021-10-14 04:45:15 字數 4974 閱讀 6194

第八章: 指標

知識結構:

1)指標的基本概念

2)怎麼定義指標

3)指標的運算

1)指標的基本概念

記憶體:以位元組為單位,由若干個位元組組成

為了便宜管理,給每個位元組編號(十六進製制)

每乙個位元組的編號在整個記憶體都是唯一

定義變數:在計算機記憶體中去預定記憶體

各類變數所預定的空間大小不同

整型:int tc 2位元組 vc 4位元組

long tc 4位元組 vc 4位元組

short tc 2位元組 vc 2位元組

實型:float tc 4位元組 vc 4位元組

字元型: char tc 1位元組 vc 1 位元組

變數的位址,指向變數的指標

用來儲存變數位址的變數,指標變數

指標變數只能儲存位址,型別必須要一致才能儲存

scanf("%d",&a);

2)定義指標變數

int a,b;

int *p,*q;

型別名 *指標變數名1,*指標變數名2...

型別名 :該指標變數的基本型別,只能儲存對應型別變數的位址

*:指明該變數是一指標型別的變數(只能儲存位址)

float *ft1,*ft2;

double *db1,*db2;

指標變數名: 不包括*號

怎麼樣去訪問變數的內容:

1)拿到該變數的位址,直接對該位址進行訪問

2)通過指標變數來間接訪問儲存單元

怎麼樣給指標變數賦值:

int a,b;

int *p,*q;

獲取變數的位址:

可以用取位址運算子 (&),將變數的位址取出

&《變數名》 : 將指定變數的首位元組的編號拿到

得到指定變數的位址

p = &a; :將a的位址取出儲存到指標變數p中

通過p可以間接訪問變數a

p就是指向變數a的指標

q = &b;

注意: 指標變數的型別必須和變數的基型別是一致才能儲存

q = 10; /*指標只能儲存位址值*/

int a,b,*q,*c,*p;

p = &a;

q = &b;

c = p; /*將p中的內容取出,賦值給指標c,使指標c和指標p同時指向p所指向的變數*/

可以讓指標不指向任何儲存單元:

int *p;

p = null;

p = 0;

p = '\0';

上面三種方式,都可以使指標p沒有指向

int a,*p;

int **q;/*指向指標的指標變數*/

p = &a;

q = &p;

指向指標的指標變數:

基本型別 **指標變數名1,**指標變數名2...

只能儲存指標變數的位址,指向的是指標

用指標怎麼樣來訪問變數:

*指標變數名;

*: 運算子將指標所指向的變數內容訪問出來

int a,*p;

a = 10;

p = &a;

a <=> *p

int a,*p,**q;

a = 10;

p = &a;

q = &p;

a *p **q

& *都是單目運算子

左邊必須是乙個變數名,不能表示式或常量

左邊必須能夠代表乙個唯一的儲存單元位址

錯誤賦值表示式:

(a+b) = 10

10 = 10

從鍵盤上輸入兩個整數,然後輸出

*:定義語句**現時,表示該變數是乙個指標變數

執行語句**現時,代表間接訪問指標變數所指向變數的值

#include "stdio.h"

void main()

10 20

a=10,b=20

press any key to continue

1)指標變數在定義時就可以給其進行初始化操作

*:定義語句**現時,表示該變數是乙個指標變數

執行語句**現時,代表間接訪問指標變數所指向變數的值

2)凡是出現&a地方,都可以指標p去代替

3)凡出現a的地方,都可以用間接訪問指標去代替(*p)

指標: 為操作儲存單元提供一種間接的訪問方式

直接訪問變數名屬於直接操作

2.交換a,b兩個變數的值(指標來操作)

#include "stdio.h"

void main()

10 20

1)a=10,b=20

2)a=20,b=10

press any key to continue

3.輸入兩個數,找出最大值(用指標來操作)

#include "stdio.h"

void main()

90 50

max = 90

press any key to continue

#include "stdio.h"

void main()

a=10,a=10

press any key to continue

單目運算子:

1) ! 邏輯非

2) + 正號

3) - 負號

4) ++ 自增

5) -- 自減

6) & 取位址

7) * 間接訪問

8) (型別名) 強制型別轉換

平級: 結合性右結合 (從右到左的運算順序)

運算過程中: 先按優先級別去運算,同級的按結合性去運算

int a,*p;

p = &a;

*p <=> *(&a) <=> a

int a=10,*p=&a;

(*p)++ *p++ 10 &a+1*2

10p = p + 1;

1: 乙個儲存單元(針對與不同型別的變數,1所代表的位元組數有所不同)

移動兩個位元組 (tc環境)

int a,*p;

p = &a

p++ 表示式的值: &a p不再指向a變數,而指向 a所代表儲存單元的後兩個位元組的地方

++p 表示式的值: &a + 1*sizeof(int)

sizeof(基本型別關鍵字) : 返回是指定的型別

在當前環境中所佔的位元組數

指標可以和整數進行運算

可以代表乙個位址(某乙個位元組的編號)

int a;

double b,*p;

p = &b;

p = &a;/*錯誤*/

p+1 表示p指標所指位置的下乙個位置

p+1 <=> &b+1*sizeof(double) <=> &b+1*8

p+5 <=> &b+5*sizeof(double) <=> &b+5*8

p++ <=> p = p + 1

要讓指標重新定位指向,需要重新各其賦值

指標的移動,必須針對一片連續的儲存單元才有意義

對於單個變數來說,指標的移動將讓沒有辦法控制指標

#include "stdio.h"

void main()

1010

1111

press any key to continue

1011

press any key to continue

a = 10

(*p)++ 10 *p = 11

(a)++ 10 a = 11

a=10;p=&a;

*p++ p++ &a p=&a+1*sizeof(int)

*(&a) 10 *p

i=1a=i++ a=i i=i+1

++i i=i+1 a=i

a=10,*p,*q

p=&a;

q=p++ q = p p=p+1

q=++p p=p+1 q=p

b=(*p)++ b=*p *p = *p + 1

b=++(*p) *p = *p + 1 b = *p

b = *p++ <=> b = *(p++)

b = *p++ b=*p p=p+1

第八章:指標02

1.指標的概念

位址2.指標變數定義

指標變數的賦值

int a,b,*p,*q,*k;

p = &a;

q = p;

k = null

k = 0

k='\0'

3.指標的運算

(*p)++

++*p

*p++

int a=1,b;

b = a++ b=a a=a+1

b = ++a a=a+1 b=a

int a,*p,*q;

p=&a;

q=p++ q=p p=p+1

q=++p p=p+1 q=p

int a,*p,*q;

p=&a;

p+1int a=10,b,*p=&a;

b = (*p)++ b=(*p) *p=*p+1

b = ++(*p) *p=*p+1 b=*p

b = *p++ b=*p p=p+1

b =*(++p) p=p+1 b=*p

4.指標變數作為函式的形參

從被呼叫函式向呼叫函式返回引數時:

1)return返回乙個引數

2)用指標變數作為形參來間接操作實參的值

3)通過全域性變數來實現

輸入兩個整數,然後對其值進行交換

#include "stdio.h"

void main()

從函式的角度:

#include "stdio.h"

void jh(int a,int b);

void main()

{ int a,b;

scanf("%d%d",&a,&b);

C語言指標小結

輸出結果同上。指標變數位址加1 inti,pa,a pa a for i 0 i 9 i 輸出結果同上。2 陣列名與指標的區別 陣列名是指標常量而指標是指標變數,舉乙個例子。inti,pa,a pa a for i 0 i 9 i 輸出結果同上。這裡如果將pa換成a,那麼編譯就會出錯。原因pa是指標...

C語言中指標的考點

考點一變數的位址和指標 1 位址和指標的定義 1 記憶體位址 計算機的記憶體是以位元組為單位的一片連續的儲存空間,每個位元組都有乙個編號,這個編號就稱為記憶體位址。一般情況下,在程式中只需指出變數名,無須知道每個變數在記憶體中的具體位址。程式中對變數驚喜訪問操作,實際上也就是對某個位址的儲存單元進行...

超經典的C語言指標講解

pointer 1 a pointer 2 b if a printf a d,b d pointer 1,pointer 2 return 0 void swap int p1,int p2 子涵數中將p1指向的變數 a 與p2指向的變數 b 互換,即將a和b的值互換,也就是a中放的是9,b中放的...