指標可以理解為乙個變數,是乙個專門用來存放位址的變數。
int *ptr = null;//整型指標,內容為空。
char* ptr = null;//char型指標,內容為空。
float* ptr = null;//浮點型指標,內容為空。
可如下使用:
int a= 10;
int*ptr = &a;
char指標解引用只能訪問乙個位元組大小,而int指標解引用能訪問四個位元組大小,故指標的型別決定了指標能訪問多大空間
32位機器上,乙個指標變數的大小為4個位元組
64位機器上,乙個指標變數的大小為8個位元組
int a= 10;
int*ptr = &a;
int**pptr = ptr;
ptr 是個一級指標,指向a的位址,pptr 是個二級指標,訪問ptr ,通過解引用操作找到a的位址。
int arr[5] =
int *ptr = arr;
*(ptr+2)//表示ptr向後移動兩個元素位址的大小並指向第三個元素的位址,然後進行解引用,拿到第三個元素。
這樣,我們的ptr就指向了arr這個陣列的首元素的位址。
int arr[2][2] = ,};
int *ptr = arr;
int *pt = &arr[0][0];//拿到的是二維陣列中第乙個元素的位址
現在我們的ptr 指標指向的是arr這個二維陣列,但是它指向的不再是首元素的位址,而是a[0](第一行)的位址。
int* arr[3];
char* arr1[3];
如上,arr,arr1就是乙個指標陣列,但其arr 的三個元素型別是int * 型別的,arr1的三個元素型別為char * 型別。
int (*ptr)[5];
char (*ptr1)[2];
如上,ptr , ptr1 是乙個指標,指向乙個陣列,陣列元素型別為int 型和char 型。
int (*ptr)();
如上,ptr 是乙個指標,這個指標指向乙個函式,函式的返回型別是int 型的。
void (*signal(int sig, void(*func)(int)))(int);
signal 是乙個函式,它返回乙個函式指標,這個函式指標所指向的的函式有乙個int 型引數,這個函式返回型別為void,而signal 這個函式的引數是這個函式指標指向的那個函式,即 void(*func)(int);
char * const*(*next)();
解析:next 是乙個指標,指向乙個函式,這個函式返回乙個指標,這個指標指向乙個只可讀的指向char的指標。
以上兩段**是從《c專家程式設計》這本書上摘抄下來的,重點是分析這裡的函式指標。《c專家程式設計》這一節內容還簡化了第乙個**,有興趣可以看看,在第三章。
C語言 指標陣列和指標陣列
本質是陣列 只不過呢,它裡面存放的資料型別不是int,也不是char這類基本型別,而是乙個指標型別,說白了就是位址,所以叫指標陣列!記住 是存放指標的陣列!int p n 本質是指標 只不過是指向乙個陣列的指標,也稱之為 行指標 int p n p是乙個指標,指向乙個int型別的一位陣列,這個一位陣...
C語言陣列和指標
1.陣列和指標的宣告 1.指向整數的指標宣告 int x 2.整數陣列宣告 int y 2.如果把int mango 100 用int mango來使用,就會發生型別不匹配錯誤 乙個是指標,乙個數陣列名 3.宣告和定義 1.定義只能進行一次,只能出現在乙個地方。定義相當於特殊的宣告,它為物件分配記憶...
C語言 陣列和指標
陣列有一系列相同的元素構成。使用陣列宣告來告訴編譯器需要乙個陣列。數值宣告包括陣列元素的數目和元素的型別。要訪問陣列中的元素可以使用下標 index 來表示單個元素,index是從0開始計數的。陣列的初始化 比如days 12 如果陣列沒有初始化 比如int no data 4 當列印出陣列元素時,...