一級指標
指標是什麼?
在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為「指標」。意思是通過它能找到以它為位址的記憶體單元指標:
指標是個變數,存放記憶體單元的位址(編號)。指標就是位址, 那麼在使用的時候, 常常會簡單的說 指標變數為指標指標就是位址, 利用這個位址可以找到指定的資料
指標變數就是儲存位址的變數
#include int main()
+ 指標的大小在32位平台是4個位元組,在64位平台是8個位元組二級指標
二級指標就是指向一級指標的指標(n 級指標就是 指向 n-1 級指標的 指標)二級指標的記憶體布局二級指標是經常用到的,尤其與二維陣列在一起的時候更是令人迷糊。例如:
char **p;
定義了乙個二級指標變數 p。p 是乙個指標變數,毫無疑問在 32 位系統下佔 4 個 byte。
它與一級指標不同的是,一級指標儲存的是資料的位址,二級指標儲存的是一級指標的位址。
對於二級指標的運算有:
int b=20;
*ppa=&b; //等價於pa=&b
**ppa 先通過 *ppa 找到 pa ,然後對 pa 進行解引用操作: *pa ,那找到的是 a .
**ppa=30
//等價於*pa=30;
//等價於a=30;
指標和陣列
1.陣列名作為右值的時候,就是第乙個元素的位址。
int main()
; int*p_first = arr;
printf("%d\n",*p_first); //輸出1
return 0;
}
2.指向陣列元素的指標 支援 遞增 遞減 運算。(實質上所有指標都支援遞增遞減 運算 ,但只有在陣列中使用才是有意義的)
int main()
; int*p = arr;
for(;p!=arr+3;p++)
return 0;
}
3、p= p+1 意思是,讓p指向原來指向的記憶體塊的下乙個相鄰的相同型別的記憶體塊。
同乙個陣列中,元素的指標之間可以做減法運算,此時,指標之差等於下標之差。
4、p[n] == *(p+n)
p[n][m] == *( *(p+n)+ m )
5、當對陣列名使用sizeof時,返回的是整個陣列占用的記憶體位元組數。當把陣列名賦值給乙個指標後,再對指標使用sizeof運算子,返回的是指標的大小。
這就是為什麼我麼將乙個陣列傳遞給乙個函式時,需要另外用乙個引數傳遞陣列元素個數的原因了。
int main()
; int*p = arr;
printf("sizeof(arr)=%d\n",sizeof(arr)); //sizeof(arr)=12
printf("sizeof(p)=%d\n",sizeof(p)); //sizeof(p)=4
return 0;
}
指標陣列
指標陣列是乙個存放指標的陣列。
int* arr1[10]; //整形指標的陣列
char *arr2[4]; //一級字元指標的陣列
char **arr3[5];//二級字元指標的陣列
陣列指標
能夠指向陣列的指標&陣列名vs陣列名定義 int (*p)[n];
()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n。
#include int main()
; printf("%p\n", arr);
printf("%p\n", &arr);
return 0;
}
arr是陣列名,陣列名表示陣列首元素的位址
&arr 表示的是陣列的位址,而不是陣列首元素的位址。
陣列的位址+1,跳過整個陣列的大小,所以 &arr+1 相對於 &arr 的差值是40
關於C語言的指標
c語言指標 今天學習了指標,講講我對它的認識。這是乙個指標 int i int p scanf d i p i i是乙個整型變數,p是乙個指標,輸入時賦值給i,p是i的位址。就好比,i是房子的名字,p是房子的位址,輸入的值是放在房子裡的東西。符號 是取位址的意思,在這裡是對i取位址。定義指標的時候,...
關於C語言指標的理解
三者的區別 char s hello world char s hello world char s 5 這個相當於建立了乙個指標變數s,指標變數s指向常量 helloworld 指標變數s位於棧中,字串 hello world 位於常量區 相當於const char s hello world 所...
關於C語言中的指標
1 對於已定義的某個變數的讀取 通過該變數來訪問它的值 通過該變數的儲存位置讀取數值 指標 作業系統會將所有的記憶體單元進行編號。關於32位作業系統與64位作業系統支援的最大記憶體。計算機底層使用二進位制進行管理,所以32位作業系統支援2的32次方個編號,即4g的記憶體位址。int a 1 int ...