1. 程式人生 > >指標陣列、陣列指標、函式指標、函式指標陣列詳解

指標陣列、陣列指標、函式指標、函式指標陣列詳解

總結指標和陣列部分的相關知識自己寫的一遍部落格:

指標是變數單元的地址,地址指向該變數單元,因此地址形象的稱為“指標”,通過指標(地址)可以找到記憶體單元。

  (總結)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;
}