日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 对数组sizeof 和对数组元素sizeof

發布時間:2025/3/20 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 对数组sizeof 和对数组元素sizeof 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這一段程序

下面這段程序很有看點:
//arr1 is an array of ints
int *source=arr1;
size_t sz=sizeof(arr1)/sizeof(*arr1);//number of elements
int *dest=new int[sz];
while(source!=arr1+sz)
??? *dest++=*source++;//copy element and increment pointers

1.source是一個指向數組arr1的第一個元素的指針.(開始時,*source與*arr1的值是一樣的.)

2.sizeof操作符的作用是返回一個對象或類型名的長度,返回值類型為size_t,長度的單位是字節.

3.對數組做sizeof操作等效于將對其元素類型做sizeof操作的結果乘上數組元素的個數.因為sizeof返回整個數組在內存中的存儲長度.

4.sizeof(*arr1),對指針arr1做sizeof操作,返回arr1所指的數組的第一個int型元素的類型長度.在這里,下面三種寫法是等效的:

sizeof(*arr1)=sizeof(*source)=sizeof(int)

5.source!=arr+sz,這里是在比較地址(沒有解引用),這里的數組名arr就自動轉化成了指向數組第一個元素的指針,加幾就指向其后面的第幾個元素.

6.比較sizeof(arr1)和sizeof(*arr1).arr1不解引用做sizeof操作,編譯器能判斷出來這就是一個普通的指針還是一個數組名指針,如果這是個數組名,就返回整個數組在內存中的存儲長度,否則就返回存放指針所需的內存大小,比如指針p里存放的地址是0x22ff50,那么存放這個地址需要4字節,則sizeof(p)返回4.而對于*arr1,這里arr1只是一個普通的指針.

-------------------------------

猜想

繼續研究上面的第六點,寫了這樣一段測試程序:

??? char a[7]={'1','2','3','4','5','6','7'};
??? char *b=&a[0];
??? char *c=a;
??? cout<<sizeof(a)<<endl;
??? cout<<sizeof(a+2)<<endl;
??? cout<<sizeof(b)<<endl;
??? cout<<sizeof(c)<<endl;

輸出的結果為:

7

4

4

4

那么,我想,或許真有數組名指針這種東西,也就是說指針a上可能有某種記號表明它是一個數組名,這種標志是數組創建的時候產生的,另一種可能就是指針a和7個數組元素存放的地址存在某種特殊聯系.

轉載于:https://www.cnblogs.com/qiri07/p/4812961.html

總結

以上是生活随笔為你收集整理的C++ 对数组sizeof 和对数组元素sizeof的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。