黑馬程式設計師 C語言 指標

2021-07-09 01:56:06 字數 3211 閱讀 8608

——- ios培訓、ios培訓、期待與您交流! ———-

什麼是指標?

嚴格意義上,指標有兩種含義:一是指一種資料型別.二是指一種儲存位址的變數.是用於儲存某乙個位址,從而可以通過位址直接對該位址記憶體空間中的資料進行操作.

使用方法

定義: 型別 *指標名;

如:int *p;表示定義乙個能存int型別位址的指標變數, 名字叫p.

賦值: 指標變數名=指標(位址).

注意:指標獲取方法(&變數名).

指標的特點

1.指標本身也有位址.指標定義之後,自身位址不變,但裡面的存的位址可以變化.

int a=1;

int*p=&a;//這一步等效於int

*p; p=&a;

printf("&a=%p---&p=%p\n",&a,&p);

以上就是用指標變數儲存了a的位址,列印結果是不一樣的

&p表示指標自身位址,而p表示指標存的位址 *p表示指標所存位址的記憶體空間.

int a=1;

int*p;

p=&a;//等效於*p=1;

以上操作後,就可以說*p就是a;

3. 指標不初始化賦值不要使用.未賦值前位址是隨機的.未賦值不可以用*p.

int a=1;

int *p;

//p=&a; 這裡被注釋掉了

以上操作是建立了乙個指標變數p,而沒有把任何位址儲存到這個變數中,那麼現在這個變數裡面儲存的是乙個隨機的位址,這個指標就是乙個野指標.

4. *修飾什麼,就表示是什麼的指標.判斷原則:先確定變數的型別.(根據符號優先順序)

int

*p2=&b;

int*p3[3];//指標型別的陣列

p3[0]=p2;

printf("p3[0]=%p\n",p3[0]);

int (*p4)[3];//陣列的指標

以上比較容易混淆,有個通用方法,用括號把*和變數名括起來的一定表示乙個指標.

5. 指標是什麼型別的,就應該存什麼型別的位址.否則*p取對應記憶體空間的值會出錯.

int

*p5;

double d=2.1;

p5=&d;

printf("*p5=%d\n",*p5);//

*p5無法取到正確的值.

以上會出錯,一開始定義的指標是int型的,不可以把乙個double的變數的位址給他.

指標與陣列的關係

什麼是指標陣列?

表示乙個陣列,用來存指標的陣列就叫指標陣列.陣列裡面的元素都是指標.

建立乙個這樣的陣列:

int

*p[3];//表示定義乙個可以存三個int指標的陣列.

int a1=1,a2=2,a3=3;

int*p[3]=; //這個陣列存放了三個int指標

int*temp;

temp=p[0];//把陣列裡面第0個元素取出來,是乙個指標.

什麼是陣列的指標?

表示乙個指標,而這個指標型別是陣列.

int arr[3]=;

int (*p)[3];表示這是乙個含有三個元素的int陣列的指標.

int (*p)[3]=&arr;

注意:int (*p)[3]=&arr;

陣列的指標在表示的時候一定要把」* 「和指標變數名括起來,不然指標變數先與結合.成陣列了.

什麼是陣列元素的指標?

表示乙個指標,而這個指標存的是陣列乙個元素的位址.

int arr[1]=;

//定義並賦值

int*p=&arr[0];

printf("*p=%d,arr[0]=%d\n",*p,arr[0]);

這裡可以對比一下陣列的位址arr與&arr[0]等值不等效.

陣列的指標的特點

1.陣列名表示第乙個元素的位址,&陣列名表示整個陣列的位址.二者值相同,但意義不同.

2.指標可以運算.但僅限於加減運算.運算的實質就是位址運算.即位址的移動.

int arr[3]=;

int *p1=&arr[1];

int a=*(p1+1);//p1的值並沒有改變.a的值為3

p1是陣列元素的指標,可以表示乙個元素(arr[1])的位址,當p1+1的時候就表示另外乙個元素(arr[2])的位址了.

3.位址(+1)向高位移動,而(-1)向低位移動.不同指標型別移動一位(+1或-1)的位元組數不同.

4.實際移動的位元組數看指標型別,型別佔多少個位元組,一位就移動多少個位元組.

int arr=;

int* parr=arr;//這裡parr代表的是陣列的指標

int* ptemp=&arr[0];//這裡ptemp代表的是陣列第乙個元素的指標

*(parr+1)代表指標向高位移動了12個位元組.

*(ptemp+1)代表指標向高危移動了4個位元組.

指標與函式

指標型函式:是函式. 這個函式的返回值型別是指標;

定義:型別 * 函式名(引數)

建立乙個指標型函式

int *add()

.表示定義乙個返回值是int指標型別的add函式.

函式指標

是指標.函式也會在記憶體開闢一塊空間.函式指標即這塊空間的位址.

定義:函式返回值型別 (*指標名)(引數型別);賦值:指標名=函式名;

建立乙個函式的指標

void add(int a). 

int (*p)(int)=add;

以上就是把函式add()的指標賦值給了p;函式名在傳遞的時候傳遞的就是指標,所以在取add位址的時候用&.

函式指標的特點

1.函式指標做加減運算可以,但沒有意義.不建議.

2.函式指標可以當作引數傳遞.因為其是乙個指標型別.

3.不管什麼型別的指標,只要是指標,其裡面存的就是位址.

黑馬程式設計師 C語言 指標

asp.net android ios開發 net培訓 期待與您交流!指標 指標是c語言中非常重要的資料型別 指標變數的定義 int p int是指標指向資料的型別 p是指標變數名稱 只是用來表示變數為指標變數 指標的使用 int a 10 int p p a 或者p a 表示將變數a的記憶體位址賦...

黑馬程式設計師 c語言指標

ios培訓 android培訓 期待與您交流!指標的定義 定義指標和定義乙個變數類似 資料型別 指標變數名 如 int p 表示定義乙個指向整形變數的指標 使用如下 int a 8 int p p a 指標變數 p中存放a的位址,可以通過p中存放的位址,可以訪問變數a中的值。訪問指標變數中存放的位址...

黑馬程式設計師 C語言 指標

一.指標的基本概念 number 10 是什麼意思呢?1.通過number這個位址,找到他指向的空間 2.到這個空間裡,取出裡面儲存的值 普通變數基本格式 變數型別 變數名 指標變數基本格式 變數型別 指標變數名 指標裡面存的是別的變數的位址 p來列印值是0x開頭的,16進製制數字 指標變數在記憶體...