相关疑难解决方法(0)

虚空的大小是多少?

这个陈述会产生什么?

void *p = malloc(sizeof(void));
Run Code Online (Sandbox Code Playgroud)

编辑:问题的扩展.

如果sizeof(void)在GCC编译器中产生1,那么分配1个字节的内存并且指针p指向该字节并且p ++将递增到0x2346?假设p是0x2345.我说的是p而不是*p.

c c++ sizeof language-lawyer

73
推荐指数
6
解决办法
6万
查看次数

C++:将指针转换为int并稍后再返回指针是否安全?

将指针转换为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)

这是否包含在标准中?

c++ pointers

24
推荐指数
4
解决办法
1万
查看次数

将数组的地址转换为其他数据类型

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在每种情况下?

c arrays pointers

11
推荐指数
3
解决办法
251
查看次数

无法理解sizeof()的返回值

我的代码中有这个:

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 malloc

3
推荐指数
1
解决办法
5123
查看次数

是 sizeof(long) == sizeof(void*) 吗?

C 能保证sizeof(long) == sizeof(void*)吗?如果不是,为什么它在 Linux 内核源代码中使用得如此广泛?

我看了sizeof(int)==sizeof(void*)?但那是关于sizeof(int)vs 的sizeof(void *)

c linux-kernel

2
推荐指数
1
解决办法
123
查看次数

sizeof(int)总是等于sizeof(void*)

可能重复:
sizeof(int)== 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)

c++

1
推荐指数
1
解决办法
546
查看次数

标签 统计

c ×4

c++ ×3

pointers ×2

arrays ×1

language-lawyer ×1

linux-kernel ×1

malloc ×1

sizeof ×1