C C 指標與陣列

2021-07-05 12:02:58 字數 2135 閱讀 6725

在二維陣列傳參時,經常遇到這樣的問題,不能將」int ** 「轉換為」int (*)[5]「,雖然二維陣列a[5][5]的a是二級指標,但是用int **是單純的二級指標,但是二維陣列的a是完全不同的。a[0]表示第一行一維陣列,a[1]表示第二行二維陣列,a是具有結構的,這一點和普通的二級指標具有很大的區別。

int (*p)[5]是陣列指標,又稱為行指標。為了方便記憶,陣列指標可以想成是「二維陣列要用到的指標「好了。

指標p指向乙個由5個元素組成的整形陣列指標。

p+1相對於p的位置移動了5個元素的記憶體單位。

int a[5][5], (*p)[5] = a;

如此一來就將p這個陣列指標指向了二維陣列的a.

char *p[5],就是說p[0],…,p[4]都是指向乙個char型的指標。一般來說,這樣的就是乙個儲存了不同長度的字串陣列罷了。

比如:char *name=

形參:

int maxa(int a, int n)

int maxb(int *a, int n)

以上兩種寫法是一樣的,沒有任何區別。

實參:

int a[10],*p;

p = a;

maxa(a,10)和maxb(p,10)是一樣的。

原因很簡單,傳入的只是個位址,還有並且還有型別,以便編譯器定址用。對於一維陣列,上面兩種寫法是一樣的。

int a[2][3]和int a[3]是等價的,但最多只能省略第一維的大小,不能省略其他維,因為實參傳過來的只是陣列的初始位址,不說明列引數,則無法確定在第幾個元素開始「換行」,即無法確定陣列在記憶體中的位置。

//二維陣列傳參問題示例

//二維陣列傳參問題示例

#include

using

namespace

std;

//方法1:傳遞陣列,注意第二維必須標明

void fun1(int arr[3], int irows)

cout

<< endl;

}cout

<< endl;

}//方法二:一重指標,這種方法和第一種其實是一樣的,只是寫法不同而已。

void fun2(int(*arr)[3], int irows)

cout

<< endl;

}cout

<< endl;

}//方法三:指標傳遞,不管是幾維陣列都把他看成是指標,

void fun3(int*arr, int irows, int icols)

cout

<< endl;

}cout

<< endl;

}//方法4:利用二級指標。不過內部不能直接寫arr[i][j],因為這樣不能正確定址,要模擬編譯器定址。

void fun4(int**arr, int irows, int icols)

cout

<< endl;

}cout

<< endl;

}int main()

, };

int k[2][3][3] = ;

cout

<< "fun1"

<< endl;

fun1(a, 2);

cout

<< endl;

cout

<< "fun2"

<< endl;

fun2(a, 2);

cout

<< endl;

//此處必須進行強制型別轉換

//所以必須強制轉換成指標,如果a是一維陣列則不必進行強制型別轉換

cout

<< "fun4"

<< endl;

fun4((int**)a, 2,3);

//此處必須進行強制型別轉換

//所以必須強制轉換成指標,如果a是一維陣列則不必進行強制型別轉換

cout

<< "fun3"

<< endl;

fun3((int*)a, 2, 3);

cout

<< "fun3"

<< endl;

fun3((int*)k, 3, 3);

cout

<< endl;

}

C C 指標與陣列

目錄 陣列記憶體位址 指標 偏移 指標加減法 指標變數遍歷陣列 取乙個變數的位址 符號 int a 4 a取得變數a的記憶體位址 陣列是一塊連續的記憶體,型別 名字 個數 sizeof 型別 個數,連續的記憶體 區域性變數的陣列,所以這個陣列的記憶體是分配在我們的棧上的 連續的記憶體,由低位址排到高...

C C 陣列與指標

經常使用stl導致陣列與指標都陌生了,複習總結一下 c c 裡指標確實更高效了,也更複雜了 陣列的建立 type t arr name const n type t指數組的元素型別,const n指常量表示式 int arr 10 is ok陣列的初始化 int arr1 10 不進行初始化,存放未...

C C 陣列與指標

include using namespace std int main char pa a cout pacout pa cout pacout pa cout pa signal segmentation fault core dumped return 0 編譯器不識別陣列 陣列就是指標a就是...