C語言之一維數組與指針


一維數組:

假如有一維數組如下:

char a[3];

該數組有3個元素,數據類型為char型,地址空間如下。

如果想訪問數據,直接使用a[0]、a[1]、a[2]取出相應地址空間的值即可

一級指針:

指針即地址,char *b即定義一個指向char型數據的指針,int *b即定義一個指向int型數據的指針。

int a=5;
int *b=&a;

例子解析:定義一個int型數據a,值為5,定義一個指向int型的指針b,b的值為a的地址。使用*b就是b指向地址的值。地址空間如下。

二級指針:

二級指針即指向指針的指針,

int a=5;
int *b=&a;
int **c=&b;

例子解析:定義一個int型數據a,值為5,定義一個指向int型的指針b,b的值為a的地址。使用*b就是b指向地址的值。定義一個指向指針的指針c,c的值為b的地址,*c就是b的值,也就是a的地址,**c就是a的值,地址空間如下。

一維數組與指針:

數組其實就是一段連續空間的數據,指針可以隨意指向某個地址,再讀取該地址的值。

int a[3];
int *b=a;
int *c=&a; //錯誤
int (*c)[3]=&a; //正確
int *d=&a[0]; int *e=&a[1]; int *f=&a[2];

例子解析:

1. 定義一維數組a[3],在例子中,a、&a、&a[0]的值雖然都是一樣,但是意義不一樣。a代表a[3]這個數組,也是a[3]的起始地址。&a就是取a[3]的起始地址。&a[0]就是取數組第一個元素的地址。

2. 例子中,使用int *c=&a是錯誤的,因為a的數據類型是int (*)[3],而不是int *,所以必須以int (*c)[3]=&a。

3. 定義了int (*c)[3]=&a,可以使用(*c)[0]取得a[0],(*c)[1]取得a[1],(*c)[2]取得a[2]。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM