我想知道free()指针是否可以转换为另一种类型.例如,如果我这样做:
char *p = malloc (sizeof (int));
int *q = (int *)p;
free (q);
Run Code Online (Sandbox Code Playgroud)
我没有收到关于gcc(-Wall)的警告.
在linux上,free上的手册页说,在malloc(),calloc()或realloc()没有返回的指针上调用free是违法的.但是如果指针被转换为中间的另一种类型会发生什么?
我问这个是因为我读到C标准不要求不同的指针类型(例如int*和char*)具有相同的大小,我不明白这是如何可能的,因为它们都需要可转换为void*为了调用malloc/free函数.
以上代码是否合法?
当我执行以下代码时:
int main()
{
char **temp;
printf("Size of **temp %d", sizeof(**temp));
printf("Size of *temp %d", sizeof(*temp));
printf("Size of temp %d", sizeof(temp));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
Size of **temp 1
Size of *temp 8
Size of temp 8
Run Code Online (Sandbox Code Playgroud)
我不明白的是char指针的大小是8多少?机器独立吗?
我正在玩指针以完全获得概念,然后想要减去两个指针,期望这两个地址之间的距离或东西,但显然我错了,所以这是我的代码.
int x = 5, y = 7;
int *p = &y;
int *q = &x;
printf("p is %d\nq is %d\np - q is %d", p, q, (p - q));
Run Code Online (Sandbox Code Playgroud)
为什么程序输出p - q is 1?谢谢.
union的size等于其中最大成员的大小.但在下面的联合中,大小显示为8字节.int和float的大小是4字节.为什么它显示8个字节?
union data {
int i;
float f;
char *str;
};
Run Code Online (Sandbox Code Playgroud)