相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果malloc,即

int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

而不是:

int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

键入cast char指向整数指针的指针

所以我看到了一些关于如何找到架构的字节顺序的例子.假设我们有一个指向int数据类型的整数指针.让我们说int值是0x010A0B12.在小端架构中,最低有效字节(即12)将存储在最低内存地址中,对吧?因此,4字节整数中的最低字节为12.

现在,检查.如果我们声明了一个char指针p,并且将整数指针强制转换为char*并将其存储在p中,并打印出取消引用的p值,我们将获得该架构的字节序的线索.如果它是12,我们就是小尾数; 01表示大端.听起来真的很整洁......

int a = 0x010A0B12;
int *i = &a;
char *p = (char*)i; 
printf("%d",*p); // prints the decimal equivalent of 12h!
Run Code Online (Sandbox Code Playgroud)

这里有几个问题,真的.由于指针是强类型的,字符指针不应该严格指向char数据类型吗?用%d打印的是什么?难道我们不应该用%c打印字符吗?

c pointers casting endianness

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

取消引用这个指针给了我-46,但我不知道为什么

这是我运行的程序:

#include <stdio.h>

int main(void)
{
    int y = 1234;
    char *p = &y;
    int *j = &y;
    printf("%d %d\n", *p, *j);
}
Run Code Online (Sandbox Code Playgroud)

我对输出有点困惑.我所看到的是:

-46 1234
Run Code Online (Sandbox Code Playgroud)

我把这个程序写成了一个实验,不知道它会输出什么.我期待可能有一个字节y.

这里发生了什么"幕后"?解除引用如何p给我-46

正如其他人指出的那样,我必须进行明确的施法才能导致UB.我没有改变这一行char *p = &y;,char *p = (char *)&y;所以我没有使下面的答案无效.

此程序不会导致此处指出的任何UB行为.

c pointers casting dereference

-3
推荐指数
2
解决办法
1243
查看次数

标签 统计

c ×3

casting ×3

pointers ×2

dereference ×1

endianness ×1

malloc ×1