【发布时间】:2012-03-07 23:34:57
【问题描述】:
我们有以下代码:
#include <stdio.h>
#define LEN 10
int main(void) {
int i;
int array[LEN];
int *p;
for (i = 0; i < LEN; i++) {
array[i] = i;
}
for (p = &array[0]; p < &array[LEN]; p++) {
printf("Address: %p ", p);
printf("Value: %d\n", *p);
}
return 0;
}
它要求我们找出服务器用于存储整数变量的字节数,并将其打印在换行符上,并提示我们使用 sizeof。
现在,我对指针有点菜鸟,所以这可能是一个非常快速的问题,但我应该打印:
printf("Size of int: %d", sizeof(p));
或sizeof(*p)
一个打印 4,另一个打印 8。我倾向于 8(它来自简单的 p),因为它指的是内存位置,而不是它指向的变量的值,对吗?而 8 表示 8 位,那么 1 字节就是答案?
【问题讨论】:
-
8not 表示 8 位,表示 8 字节。 -
sizeof(p)和sizeof(*p)是有区别的,第一个是指针的大小,另一个是指针指向的大小。同意 Andrew Marshall,返回的值是字节而不是位,我不相信标准允许位作为将返回的已定义单元大小,指针的存储大小通常与 int 上的大小相同,即定义为操作系统可以有效存储并保证至少与此一样大的内容,因此通常为 4 字节(32 位)或 8 字节(64 位)。
-
括号是多余的。拥有
sizeof p或sizeof *p一样好。你不会在return(0);中使用括号吗? -
非常感谢,伙计们。所以只是为了确保,答案将是 4 个字节(或 32 位),因为这是整数的 sizeof 值,而不是指针?
-
在类型上使用
sizeof时需要括号(例如sizeof(int))。有些人确实在return(0)中使用括号。酒吧。