希望您能帮助我们理解这两行之间的区别:
int(*p)[20] = (int(*)[20]) malloc(sizeof(int) * 20);
int* y = (int*)malloc(sizeof(int) * 20);
如果我这样做:
int * tmp = p;
OR
int * tmp = y;
我得到分配的数组/内存中第一个元素的地址。
我想更彻底地了解它们的区别,什么时候我会使用它们?
添加到问题中:
这个选角合法吗?请解释为什么,如果它是合法的,tmp等于什么?:
int(*p)[20] = (int(*)[20]) malloc(sizeof(int) * 20);
int * tmp = (int*) p;
感谢任何有贡献的人!
真诚,
Roe:(
int(*p)[20]
是20个整数数组的指针
int* y
是指向内部的指针
当你增加p
时,它将增加sizeof(array of 20) integers
(在我的系统上,我看到80个字节的差异,因为int是4个字节(
y
仅增加sizeof (int)
#include<stdio.h>
#include<stdlib.h>
int main() {
int(*p)[20] = malloc(20*sizeof(int));
int* y = malloc(sizeof(int) * 20);
int (*pd)[20] = p+1;
int *yd = y+1;
printf("p = %u and p+1 = %u n", p, pd);
printf("y = %p and y+1 = %p n", y, yd);
return 0;
}