这个陈述会产生什么?
void *p = malloc(sizeof(void));
Run Code Online (Sandbox Code Playgroud)
编辑:问题的扩展.
如果sizeof(void)在GCC编译器中产生1,那么分配1个字节的内存并且指针p指向该字节并且p ++将递增到0x2346?假设p是0x2345.我说的是p而不是*p.
将指针转换为int并稍后再返回指针是否安全?
如果我们知道指针是否为32位长且int是32位长怎么样?
long* juggle(long* p) {
static_assert(sizeof(long*) == sizeof(int));
int v = reinterpret_cast<int>(p); // or if sizeof(*)==8 choose long here
do_some_math(v); // prevent compiler from optimizing
return reinterpret_cast<long*>(v);
}
int main() {
long* stuff = new long(42);
long* ffuts = juggle(stuff);
std::cout << "Is this always 42? " << *ffuts << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这是否包含在标准中?
int main()
{
char arr[5][7][6];
char (*p)[5][7][6] = &arr;
printf("%d\n", (&arr + 1) - &arr);
printf("%d\n", (char *)(&arr + 1) - (char *)&arr);
printf("%d\n", (unsigned)(arr + 1) - (unsigned)arr);
printf("%d\n", (unsigned)(p + 1) - (unsigned)p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我得到以下输出:
1
210
42
210
Run Code Online (Sandbox Code Playgroud)
为什么输出不是1在每种情况下?
我的代码中有这个:
int x = 4;
char* array = malloc(x*sizeof(char));
size_t arraysize = sizeof (array);
printf("arraysize: %zu\n", arraysize);
Run Code Online (Sandbox Code Playgroud)
打印出来的代码,
arraysize:8
为什么是8而不是4?(由于4*sizeof(char)= 4*1)
C 能保证sizeof(long) == sizeof(void*)吗?如果不是,为什么它在 Linux 内核源代码中使用得如此广泛?
我看了sizeof(int)==sizeof(void*)?但那是关于sizeof(int)vs 的sizeof(void *)。
我想知道是否保证在32位和64位系统sizeof(int)中总是等于sizeof(void*)(即分别为32位和64位).
另外,我需要知道是否始终保证a long int可以容纳a int和a 的位void*,例如
long int lint = (((int)integer)<<sizeof(int)) | (void*)ptr;
Run Code Online (Sandbox Code Playgroud)