程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c語言數組指針

c語言數組指針

編輯:關於C++

c語言數組指針。本站提示廣大學習愛好者:(c語言數組指針)文章只能為提供參考,不一定能成為您想要的結果。以下是c語言數組指針正文


這兩天學習數組指針,被搞的很蛋疼,分享一下

首先是簡單的一維數組

定義一個數組int arr[5]; arr是指向數組第一個元素的int類型指針,arr+1就是指針數組第二個元素的int類型的指針,*arr就是取這個指針裡面對應的值,這個比較好理解

int arr[5] = { 1, 2, 3, 4, 5 };//定義數組
printf("\n%x", *arr);//1    =arr[0]
printf("\n%x", *(arr+1));//2    =arr[1]


到了二維數組這邊比較蛋疼,找了很久找到一句話來解釋我的疑惑,然後一切就迎刃而解

定義一個二維數組int arr[2][3]

int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
printf("\n%d", sizeof(*(&arr)));//24
printf("\n%d", sizeof(*arr));//12

二維數組分為行和列,這是一個兩行三列的數組,

第一個是&arr是取整個數組的指針,對應類型是int[2][3] ,所以它的對應值的大小是24(每個數字占四個字節)。

第二個 arr代表第一行的數組指針,這裡可能需要大家動動腦子,在第一個例子一維數組int arr[3] 裡面,arr默認就是第一個元素所對應的指針,類型是int,而指針自增每次的增加量=sizeof(你所用的數據類型)

所以arr+1的值會加4(因為一維數組所對應的元素的指針類型是int,4個字節),所以+1會找到數組的下個元素地址,並*地址求得指針地址對應的值,但是二維數組的裡面的值不是int類型,而是int[3]

,所以arr是指向二維數組的第一行的指針,也就是對應裡面的{1,2,3}的值,所以它的大小是12個字節

 

這個時候我們又運行了一段程序

int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
printf("\n%x", arr);//
printf("\n%x", *arr);//

發現兩個的值都是這個數組的首地址,第一個是數組第一行的指針,所以直接打印會打印出第一行的首地址很正常,我們能理解

但是第二個不是應該打印第一行的值嗎?

原來是因為使用整行數據沒有實際的含義,編譯器遇到這種情況都會轉換為指向該行第 0 個元素的指針  就像一維數組的名字,在定義時或者和 sizeof、& 一起使用時才表示整個數組,出現在表達式中就會被轉換為指向數組第 0 個元素的指針。 所以如果我們輸入 **arr就會打印出該行的第0列的元素的值,也就是1        

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved