一、數組和指針的介紹
指針是一個變量,它存儲了一個內存地址,該地址指向一個變量的存儲位置。通過指針,可以訪問和修改指向的變量。數組是一個由相同數據類型元素組成的集合,可以通過索引來訪問和修改這些元素。
二、兩者之間的區別
1,存儲方式
數組:數組在內存中是連續存放的,開辟一塊連續的內存空間。數組是根據數組的下進行訪問的,數組的存儲空間,不是在靜態區就是在棧上。
指針:指針很靈活,它可以指向任意類型的數據。
指針p存儲的是一個內存地址,這個地址指向的是某種類型變量的存儲空間。如果要訪問這個變量,需要使用指針運算符(*)來解引用指針,將指針所指向的地址轉換為所指向的變量的值。指針的值也可以改變,通過指針運算符(&)獲取變量的地址,然后將其賦給指針變量。
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //
int a = 10;
int* p = &arr[0]; // 數組下標訪問第一個元素,取地址后是第一個元素的地址
//int* p = arr; // 跟上面這行是等價的,數組名表示這個數組第一個數據的指針,此時數組和指針是“通用的”
p = &a; // 指向a變量的地址,此時 *p取到的值就是a變量的值
2,賦值方式
同類型指針變量可以相互賦值,數組不行,只能一個一個元素的賦值或拷貝
3,占用空間大小
數組的大小取決于數組元素的類型和元素個數
數組所占存儲空間的內存:sizeof(數組名)
數組的大小:sizeof(數組名)/sizeof(數據類型)
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 占40個字節
int* p = arr; // 占4個字節(32位系統)
char c = 'A';
char* p2 = &c; // 占4個字節(32位系統)
指針無論是什么類型,在32位平臺是占4 byte,在64位平臺是占8 byte
4, 可變性
數組的大小在定義時就已經確定,無法改變,而指針可以隨時指向不同的變量,從而實現動態變化。
三、數組指針和指針數組的區別
指針數組 :首先是一個數組,只不過數組的每個成員是一個指針變量。
數組指針 :首先是一個指針,這個指針指向一個數組。
代碼:
int *p1[10]; // 指針數組,[]的優先級大于*,p1是一個數組,數組的值是一個指針
int (*p2)[10]; // 數組指針
對于指針數組,p1先和“[]”結合,構成一個數組的定義,數組名為p1,int *修飾的是數組的內容,即數組的每個元素。那么它本質是一個數組,這個數組里有10個指向int類型數據的指針。
對于數組指針,“()”的優先級比“[]”高,“*”和p2 構成一個指針的定義,指針變量名為p2,int 修飾的是數組的內容,即數組的每個元素。數組在這里并沒有名字,是個匿名數組。那么它本質是一個指針,它指向一個包含10個int 類型數據的數組。
-
存儲器
+關注
關注
38文章
7452瀏覽量
163604 -
C語言
+關注
關注
180文章
7598瀏覽量
136186
發布評論請先 登錄
相關推薦
評論