snr*_*snr 0 c c++ memory pointers sizeof
我从讲师那里听说,sizeof(某些指针)总是在机器上相等.例如,如果它是64位,则所有指针都是8字节,在32位4字节中.所以,sizeof当我想指定数组的大小时,我喜欢使用
int arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(int)
Run Code Online (Sandbox Code Playgroud)
我假定上面的代码的int需要4,所以20/4给出了元件的数目arr.
int arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(int*)
Run Code Online (Sandbox Code Playgroud)
我也假设sizeof(some pointer)take 4,所以20/4再次给出了元素的数量arr.
当我将它应用于double数组时,我很困惑.我认为它应该不起作用.但是,它有效.
double arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(double*);
Run Code Online (Sandbox Code Playgroud)
如果每个指针在一台机器中占用相同的大小,结果怎么样呢?问题可以解释一下吗?编辑
我把*arr和双指针混合在一起
指针的大小不是double数组中元素类型的大小,因为元素double不是指针.
当你应用于sizeof数组时,它给出了数组的大小(以字节为单位)
double arr[] = {2, 5, -1, 10, 9};
Run Code Online (Sandbox Code Playgroud)
它的
5 * sizeof(double)
Run Code Online (Sandbox Code Playgroud)
和sizeof(double) != sizeof(double *).所以要实际获得所需数组中的元素数量
sizeof(arr) / sizeof(double);
Run Code Online (Sandbox Code Playgroud)
但为了使其更易于维护,您可以询问像这样的元素类型的大小
sizeof(arr) / sizeof(*arr);
Run Code Online (Sandbox Code Playgroud)
要么
sizeof(arr) / sizeof(arr[0]);
Run Code Online (Sandbox Code Playgroud)
此外,不要依赖此方法来确定数组中的元素数.请注意,在运行时,无法从c中的数组本身知道它,因为它不与数组一起存储.如果要跟踪元素数量,则需要存储该值.
虽然这在您第一次想到它时可能看起来很烦人,但是根据您应该了解的经验,这样做会更好.因为它可以让你完全控制你的程序必须处理的数据,一旦你习惯了它,就会很难相信那些像python的len运算符一样给你数组长度的语言.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |