我正在学习C语言,但以下代码片段在GCC编译器中并未出现任何警告或错误。我给指向int类型的指针分配了一个字符的空间,这是GCC做的一些更改(例如默默地优化为int类型分配的空间)吗?
#include <stdlib.h>
#include <stdio.h>
typedef int *int_ptr;
int main()
{
int_ptr ip;
ip = calloc(1, sizeof(char));
*ip = 1000;
printf("%d", *ip);
free(ip);
return 0;
}
更新
阅读下面的回答后,如果我采用相反的方式进行操作,例如将int的空间分配给char指针,那么是否仍然不安全和有风险?我的困惑源于Rosetta Code中的以下答案,在函数StringArray StringArray_new(size_t size)
中,编码者似乎确实在做这个操作:this->elements = calloc(size, sizeof(int));
其中this->elements
是一个char ** elements
。
ip
是为 int 还是 char 分配了空间? - Student0000000000000001
和0000000100000000
。请阅读有关字节序的内容。 - klutt