日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言之數組名與數組起始地址的關系解析_C 語言

作者:KingOfMyHeart ? 更新時間: 2022-09-05 編程語言

數組名與數組起始地址的關系

void show(int *arr,int len) {
    cout << "in show(): arr lenth = " << sizeof(arr) << "\n";
    for (int i = 0; i < len; ++i) {
        cout << arr[i] << " ";
    }
    cout << "\n";
}

int main()
{
    int arr[] = {1,2,3,4,5,6,7};
    cout << "in main(): arr lenth = " << sizeof(arr) << "\n";
    cout << "in main(): &arr = " << arr << "&arr+1 = "<<&arr+1<<"\n";
    show(arr,sizeof(arr)/sizeof(arr[0]));
    return 0;
}

數組名arr表示整個數組的兩種情況

  • 在同一作用域下,或者說在同一個函數中,sizeof(arr)表示的是整個數組占用的空間大小;
  • 在同一作用域下,或者說在同一個函數中,&arr + 1,表示加整個數組大小。

其余情況都表示數組的起始地址

數組名作為函數參數傳遞時會退化成一根指針,表示數組的起始地址,大小等于4字節,所以就無法求出數組的長度。

小結:數組作為參數傳遞,除了傳遞數組的起始地址,另外一定要傳遞數組的長度,否則可能存在大問題。

數組名為什么代表首地址

對于一個數組,比如int a[4],它的數組名a代表首地址,這是為什么呢,看了很多解釋,感覺都很扯淡,其實如果我們從匯編的角度來看數組,就非常簡單了

數組的0.1.2.3都是偏移地址,而a 就是段地址, 這個段地址的值根 第一個元素的地址是一樣的,所以指向第一個元素,段地址中這跟匯編的尋址方式有 異曲同工的地方,就是這么簡單,a代表一個首地址,然后加上偏移量就可以定位每個數組的地址。

原文鏈接:https://blog.csdn.net/KingOfMyHeart/article/details/107450015

欄目分類
最近更新