我很困惑 sizeof
是什么?函数返回。
假设我在 sizeof
的程序中输入以下内容,这就是返回的内容:
sizeof(char) == 1
sizeof(int) == 4
sizeof(float) == 4
sizeof(long) == 8
sizeof(double) == 8
sizeof(void *) == 8
sizeof Pointer
是 8。
所以如果我 malloc
一个长数组:
long *array = (long *)malloc(64)
这sizeof()
吗?插入malloc
我的长数组是等价的吗?
long *array = (long *)malloc(8*sizeof(long))
现在如果我有一个结构:
typedef struct treenode {
struct treenode *left;
struct treenode *right;
void *content;
} Treenode;
然后我运行 sizeof(Treenode)
,我是否将结构体的所有元素添加在一起?
Pointer + Pointer + void * = 8 + 8 + 8 = 24
我尝试在程序中运行它,但是我得到 sizeof(Treenode)
返回 12。
我还想知道为什么当我创建这样的新结构时:
typedef struct country {
char city[40];
int population;
int rank;
}
并尝试 malloc(sizeof(country *))
仅分配 8 个字节,而不是结构体的字节。
最后当我这样做的时候sizeof("Korea")
,为什么我的返回值是6而不是5?因为字符串中只有 5 个字符,所以不应该是 5 吗?
最佳答案
我将分别解决每个问题:
这些在您所描述的上下文中是等效的
long *array = (long *)malloc(64) long *array = (long *)malloc(8*sizeof(long))
但是,这不一定在所有机器上都是正确的(如果说在一台机器上 long 是 16 字节),因此此代码不可移植。您应该只使用第二种可移植的方法。
我不确定为什么尺寸声称是 12 - 抱歉。 (您确定所有指针的大小都是 8 吗?)
- 虽然
country
结构可能非常大,但指向country
的指针只是一个指针,因此在您的情况下它的大小为 8。 - 在 C 中,字符串以 null 结尾,因此具有五个字母的字符串有一个尾随 null,这可能是字符串大小的一部分。
关于c - sizeof(结构)、sizeof(字符串)、sizeof(数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27081933/