指標與陣列及函式關係

2021-06-07 19:52:32 字數 1309 閱讀 8039

1.對於c++的九種內建基本型別來說。在程式中出現該名稱,即表示指向該型別的乙個變數(或常量等)。通常我們對於變數作為右值,即去變數位址空間的值。但對於陣列名和函式名則不同(因為陣列的值和函式值很難或無法表示)。如:

int arr[2] = ;    //c++規定陣列名代表指向首元素的位址,即陣列名作為右值,取的是第乙個元素的位址(如果取陣列空間的值很難表示,另外陣列名作為指標並不表示該指標開闢空間儲存下了),即陣列名是乙個常量的int型的指標。&arr表示乙個指向陣列的指標。兩者值一樣,但型別不同。

#include

using namespace std;

int main()

;//if(arr == &arr)    //error 型別不匹配

//   cout << "equal" << endl;

cout << arr << endl;

cout << &arr << endl;

return 0;

}輸入的結果是一樣的。

2.函式上面所述類似,但函式名即表示乙個指向該函式型別的乙個指標。&func = func = *func c++的這種規定是有一定意義的。原因和陣列的規定類似。

#include

using namespace std;

void func()

void (*func2)();//指向函式的指標,函式名是乙個const函式指標,那麼雖然*func2內容不可以改變,但第二層指標func2可以改變(雖然第一層指標和第二層指標指向的是同一位址,訪問許可權是和變數名相關的。故雖是乙個位址,但用第二層指標可以改變),見下面**(void (*func2)(){}這樣定義是錯誤的,用函式型別指標去定義乙個指標,不能加上該型別的定義體,就想不能int *i = 1;這樣定義)。

int main()

上面程式可以正確執行。

3.對於typedef void func(int i);這裡func型別名不在是乙個指標而是以具體的函式型別名(對於直接定義的void func()中func是乙個指標)。以下初始化賦值是錯誤的。

typedef void func();

void func(){}

int main(int argc, char *args)

因為右邊是乙個指標,左邊定義的是乙個函式物件,由於現在還不知道如何直接給乙個函式物件賦值,一般會用指標func *fun = func;

更經常使用的是typedef void (*func)(int i);

以上說明函式也有型別也可以示例乙個物件,體現了一切都是物件的思想(物件都可以去其位址,但對於型別來說不行如&int或&c(c為class)不行)。

指標與陣列,指標與函式之間的關係

指標陣列,它的關鍵在於是乙個陣列,即陣列中每個元素都是指標。陣列指標,他的關鍵在於是指標變數,即這個指標指向乙個陣列。include int main 這是乙個陣列,大家都知道。int parr1 4 這是指標陣列,首先的優先順序比 的優先順序高,所以parr 先與結合,它是乙個陣列,然後再與 結合...

指標與陣列的關係及運算

一 概念 1.1 指標陣列 char p 4 表示p是含有4個元素的陣列,每個元素存放的資料是指標型別。1.3 指標與陣列的關係 其實指標的本質就是陣列,一級指標是一維陣列,二級指標是二維陣列,以此類推。注意 與 都是取資料符號,但 取得是陣列自身元素的資料,而 取得是間接取p值的資料,也就是變數a...

C 指標與陣列的關係及運算

陣列其實是乙個位址,這個位址儲存的是陣列的第乙個元素的記憶體位址。因此可以將陣列名賦值給乙個指標,或者你也可以將陣列名當成乙個指標使用。以下訪問陣列的 都是正確的。int array 10 int parray array 直接將陣列名賦值給指標 訪問陣列的第乙個元素可以如下方式 array 0 正...