——- 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進製制數字 指標變數在記憶體...