指標陣列、陣列指標、函式指標、函式指標陣列詳解
阿新 • • 發佈:2019-01-02
總結指標和陣列部分的相關知識自己寫的一遍部落格:
指標是變數單元的地址,地址指向該變數單元,因此地址形象的稱為“指標”,通過指標(地址)可以找到記憶體單元。
(總結)1.指標是存放地址才出現的,地址是為了標示一塊地址空間的;
2.指標讓地址有地方存放,指標讓記憶體的訪問更加方便;
3.指標的大小在32位平臺是4個位元組,在64位平臺是8個位元組。
#include <stdio.h> int main() { int a = 10; //在記憶體中開闢一塊空間,初始化為10 int *p = &a; //這里我們對變量a,取出它的地址,可以使用&操作符,地址型別為int* //將變數a的地址存放在p變量中,p就是一個指標變量,該指標變數指向a這塊空間 return 0; }
一級指標 :變數的指標
int main()
{
int a = 10;
int *pa = &a; //整型指標pa儲存變數a的地址
printf("%d\n", *pa); //解引用pa,通過指標pa找到該空間的值為10
return 0;
}
二級指標 :指標變數也是變數,是變數就有地址 ;所以變數地址的指標就是二級指標變數
int main() { int a = 10; int *pa = &a; //整型指標變數pa儲存整型變數a的地址 int **ppa = &pa; //ppa儲存pa的地址 printf("%d\n", **ppa); //兩次解引用,找到a的值為10 return 0; }
一維陣列 :
int main()
{
int arr[10] = { 0 }; //arr陣列儲存十個元素,陣列元素初始化為0
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d\n", arr[i]); //列印arr陣列的十個元素
}
return 0;
}
二維陣列
int main() { int arr[3][3] = { 0 }; //初始化三行三列元素,每個元素初始化為0 int i = 0; int j = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%d\n", arr[i]); //列印九個元素,均為0 } printf("\n"); } return 0; }
指標和陣列的運算
int main()
{
int ch[5] = { 1, 2, 3, 4, 5 };
int *cp = &ch;
&ch; //取出ch空間的地址
cp; //cp儲存ch空間的地址
&cp; //取出的地址為二級指標
*cp + 1; //指向陣列後面的內容,隨機值
*(cp + 1); //取出元素2
}
指標陣列
用於儲存指標的陣列,也就是陣列元素都是指標
陣列指標指向陣列的指標
int main()
{
int c[4] = { 1, 2, 3, 4 };
int *a[4]; //指標陣列
int(*b)[4]; //陣列指標
b = &c; //將陣列c中元素賦給陣列a
for (int i = 0; i<4; i++)
{
a[i] = &c[i];
}
printf("%d", *a[1]); //輸出2
printf("%d",(*b)[2] ); //輸出3
return 0;
}
函式指標
/*
* 求最小值
* 返回值是int型別,返回兩個整數中較小的一個
*/
int min(int a, int b) {
return a < b ? a : b;
}
int(*f)(int, int); // 宣告函式指標,指向返回值型別為int,有兩個引數型別都是int的函式
int _tmain(int argc, char* argv[])
{
f = max; // 函式指標f指向求最大值的函式max
int c = (*f)(1, 2);
f = min; // 函式指標f指向求最小值的函式min
c = (*f)(1, 2);
printf("The min value is %d \n", c);
getchar();
return 0;
}
函式指標陣列
void function0(int x)
{
;
}
void function1(int x)
{
}
void function2(int x) //函式定義
{
;
}
int main()
{
void(*f[3])(int) = { function0, function1, function2 }; //將這3個函式指標儲存在陣列f中
return 0;
}