gpt4 book ai didi

c - 指针数组的大小

转载 作者:行者123 更新时间:2023-12-01 15:42:19 26 4
gpt4 key购买 nike

我对 sizeof 运算符有疑问

代码 1:

int main()
{
int p[10];
printf("%d",sizeof(p)); //output -- 40
return 0;
}

代码 2:
int main()
{
int *p[10];
printf("%d",sizeof(*p)); //output -- 4
return 0;
}

在第一个代码中 p 指向一个整数数组。
在第二个代码中 p 指向一个指针数组。
我无法理解为什么第一个代码 o/p 是 40 但第二个代码 o/p 是 4 认为两者都指向相同大小的数组?

最佳答案

以下程序的输出将为您提供有关类型大小和指向类型的指针的一些提示和理解。

#include <stdio.h>

int main(void)
{
int p1[10];
int *p2[10];
int (*p3)[10];

printf("sizeof(int) = %d\n", (int)sizeof(int));
printf("sizeof(int *) = %d\n", (int)sizeof(int *));
printf("sizeof(p1) = %d\n", (int)sizeof(p1));
printf("sizeof(p2) = %d\n", (int)sizeof(p2));
printf("sizeof(p3) = %d\n", (int)sizeof(p3));

return 0;
}

int p[10]; => 10 consecutive memory blocks (each can store data of type int) are allocated and named as p

int *p[10]; => 10 consecutive memory blocks (each can store data of type int *) are allocated and named as p

int (*p)[10]; => p is a pointer to an array of 10 consecutive memory blocks (each can store data of type int)

现在来回答你的问题:
>> in the first code p points to an array of ints.
>> in the second code p points to an array of pointers.

你是对的。代码中:2、要获取p指向的数组的大小,需要传入基地址
printf("%d", (int)sizeof(p));

而不是以下
printf("%d", (int)sizeof(*p));   //output -- 4

以下是等效的:
*p, *(p+0), *(0+p), p[0]
>> what's the difference between p[10] and 
>> (*p)[10]...they appear same to me...plz explain

以下是您另一个问题的答案:
int p[10];
_________________________________________
| 0 | 1 | 2 | | 9 |
| (int) | (int) | (int) | ... | (int) |
|_______|_______|_______|_________|_______|


int (*p)[10]
_____________________
| |
| pointer to array of |
| 10 integers |
|_____________________|

关于c - 指针数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com