C陣列和指標

2022-05-23 14:42:15 字數 2588 閱讀 9136

問題一: 如何理解陣列作為函式引數時,陣列名就是指標?

1 #include2 #include3

using

namespace

std;

4void intfun(int

arr)511

void charfun(char

arr)

1220

intmain()21;

24char a2 = "

hello world!";

2526

//c語言方法列印的是第乙個元素的位址

27 printf("

c_main_int-------------------------------\n");

28 printf("

%x \n

", a1); //

列印第乙個元素位址

29 printf("

%x \n

", &a1); //

列印第乙個元素位址

30 printf("

%x \n

", &a1[0]); //

列印第乙個元素位址

3132 printf("

\nc_main_char-------------------------------\n");

33 printf("

%x \n

", a2); //

a2即位址,列印第乙個元素位址

34 printf("

%x \n

", &a2); //

a2即位址,列印第乙個元素位址

35 printf("

%x \n

", &a2[0]); //

a2即位址,列印第乙個元素位址

36 printf("

%s \n

", a2); //

a2即位址,即從第乙個元素開始列印以字串的形式

37 printf("

%s \n

", &a2); //

a2即位址,即從第乙個元素開始列印以字串的形式

38 printf("

%s \n

", &a2[0]); //

a2即位址,即從第乙個元素開始列印以字串的形式

39//

printf("%s \n", &a2[7]);

//從陣列的第8個元素開始列印

4041

42 printf("

\nc_fun_int-------------------------------\n");

43intfun(a1);

4445 printf("

\nc_fun_char-------------------------------\n");

46charfun(a2);

5354

return0;

55 }

問題一結論:當arr為陣列時,arr,&arr,&arr[0]效果是一樣的,都是陣列第乙個元素的位址.但是也有例外,在陣列(此處的arr為形參)作為函式引數的時候,&arr是形參的位址並不是實參的位址,形參的位址即為編譯器自動為區域性變數arr分配的位址,實參的位址即為主函式實參陣列的第乙個元素的位址.而這種情況下的另外兩個表示式也就是arr和&arr[0]還是一樣的含義為實參第乙個元素的位址

問題二:對陣列名取位址是個什麼鬼?為什麼在主函式中&arr和arr的效果是一樣的?

1 #include2 #include3

using

namespace

std;45

intmain()6;

910int *p1 = arr; //

p1是個指向int型變數的指標變數!

1112 typedef int (* p)[100];//

p是使用者自定義的型別,是個指標型別,該指標指向int型的大小為100的陣列

1314 p p2 = &arr; //

p2是指向int陣列型別的指標變數!

1516 printf("

p1: 0x%x \n

", p1);

17 printf("

p2: 0x%x \n

", p2);

1819 printf("

p1[1]: %d \n

", p1[1

]);20 printf("

p2[1]: %d \n

", p2[1

]);21 printf("

(*p2)[1]: %d \n

", (*p2)[1

]);22

23return0;

24 }

問題二結論:p1和p2的效果是一樣的但是型別是不一樣的!

c 陣列指標和指標陣列

先記住 指標陣列 本質是陣列,資料可以用來存放int float等物件,當然也可以存放指標。例子 陣列指標,用樓上的話就是指向陣列的指標,操作指標就可以運算元組如下 int a 3 int p a printf 陣列指標 d n p 1 列印的結果為2,原因是p初始化指向了陣列a的首位址,即a 0 ...

C 筆記 C 陣列指標和指標陣列

char p 10 為陣列指標,實際上相當於二維陣列,也就是指向乙個一維陣列的指標 p可以單獨看做指向陣列的指標 比如這樣 int b 2 int cc 2 2 1,2 3,4b cc b cout 這樣的賦值是可以的,b指向的陣列的大小一定要和cc的第一維陣列大小一致,這裡輸出,4,因為b 這個時...

C語言 指標陣列和指標陣列

本質是陣列 只不過呢,它裡面存放的資料型別不是int,也不是char這類基本型別,而是乙個指標型別,說白了就是位址,所以叫指標陣列!記住 是存放指標的陣列!int p n 本質是指標 只不過是指向乙個陣列的指標,也稱之為 行指標 int p n p是乙個指標,指向乙個int型別的一位陣列,這個一位陣...