C.中(*)[]和*之间的差异



希望您能帮助我们理解这两行之间的区别:

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;    
}

相关内容

  • 没有找到相关文章

最新更新