c - 当指针指向单个字符以及动态声明的长整数数组时,指针的大小如何变化? C代码

标签 c

我知道数组声明会导致保留一 block 内存,但对于由指针表示的数组则不会。因为它包含数组第一个元素的地址。

但是关于大小如何从指向单个长整型变为动态声明的长整型数组,我们将非常感谢有关该主题的任何解释。

亲切的问候

示例:

long int *plint = 5; // size is the same as

long int *arr;

arr = (long int*)malloc(5*(sizeof(long int));

arr 的大小与 plint 的大小相同吗?

如果不是,它如何改变大小?

最佳答案

我想你的代码看起来像这样:

long *ptr = 0;
long ra[10];
printf("%d %d\n", (int)(sizeof(ptr)), (int)(sizeof(ra)) );

在这种情况下,ra 不是指针,并且它的大小也不是指针的大小。

&ra[0] 是指向第一个元素的指针,因此您可以这样做:

print("%d\n", (int)(sizeof(&ra[0])));

您会看到它的大小与 ptr 相同。

在大多数情况下,当您在表达式中使用 ra 时,它会“衰减”为指向其第一个元素的指针。但 sizeof 不是其中一种情况。

关于c - 当指针指向单个字符以及动态声明的长整数数组时,指针的大小如何变化? C代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14120865/

相关文章:

c - 为什么我的 printf() 不打印文本文件中的第一个字符?

c++ - 非惰性/短路 bool 运算符,强制计算两个参数

c - 在 "negative"位置填写数组值

使用当前时间创建日志文件

c - 如何优化我的代码,计算小于 200 万的所有总和

C While 循环表现得很有趣

c++ - lua - 在 C 中存储闭包,在 C 中调用异步

逐行比较文本文件中的内容

c++ - 无法使用 CMake 和 ncurses 进行编译

c - 在 Unix C 中使用管道