常見的指標與陣列名以及函式名之間的區分

2021-08-08 01:49:38 字數 1620 閱讀 7714

可執行**如下(不過是將int型換成了char型):

#include "stdafx.h"

int _tmain(int argc, _tchar* argv)

;//該定義可行,優先順序大於*,所以a是乙個陣列,(char*)代表字元指標,所以這是乙個包含4個字元指標的陣列。

printf("%p %p %p %p\n", a[0], a[1], a[2], a[3]); //陣列元素中儲存的位址

printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);//陣列元素單元本身的位址

printf("%s %s %c %c\n", a[0], a[1], a[2], a[3]);//陣列元素中儲存的位址所指向的字串或字元。

//a==&a[0];兩者等價

// char **s = a;//陣列名a是常量,可以給別人賦值,但不能a=s;

printf("**s:以下三個輸出等價\n");

printf("%s\t", *s);

printf("%s\t", a[0]);

printf("%s\n", *a);

/* char b[5] = ;//該定義會出錯,因為,一維的字元陣列就是相當於乙個字串,接收不了多個字串的初始化形式

char (*c)[5] = ;//該定義會出錯,因為,c是乙個指標,指向乙個一維陣列;

*/ //

printf("char(*p)[10]:\n");

char sztest[10] = ;

char(*p)[10]; //這裡的p是乙個指向一維陣列的指標,而且char(*p)[size]的引數size必須與要指向的一維陣列的size大小相等,否則賦值會出錯;

char *p2;

p = sztest;

p = &sztest[0];

p2 = sztest[0];

printf("p:%p\n", sztest);

printf("0:%p\n", sztest[0]);

printf("1:%p\n", sztest[1]);

for (int i = 0; i < sizeof(sztest) / 10; i++)

///printf("char b[5][10]:\n");

char b[5][10] = ;//二維的字元陣列就是相當於多個字串

printf("%p %p %p %p\n", b[0], b[1], b[2], b[3]);

printf("%s %s %c %c\n", b[0], b[1], *b[2], *b[3]);

// getchar();

return 0;

}

執行結果:

參考**:

csnd:深入 char * ,char ** ,char a[ ] ,char *a 核心(比較詳細)

知乎:int a; int* a; int** a; int (*a)[10]; int (*a)(int)區別?

函式名與陣列名的誤解

一 函式名的誤解 很多人把函式名理解為是函式的位址名,其實函式名是乙個函式實體的代表,並非是乙個位址的代表。函式名可以作為函式的位址,但是,絕大多數人都忽略了乙個條件,從函式到指標的隱式轉換是函式名在表示式中的行為,就是說,這個轉換僅在表示式中才會發生,這僅是函式名眾多性質中的乙個,而非本質,函式名...

陣列名與指標

引言 指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的開發,而身邊...

陣列名與指標

include using namespace std int main int b 2 10 陣列名本身就是指標,再加上 就變成了雙指標,這裡的雙指標的就是指二維陣列 int p int a 1 p指向a陣列的第6個元素 雖然不存在 cout p 1 cout b 1 cout b 0 retur...