0

希望在理解这两行之间的区别方面获得一些帮助:

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;

感谢任何做出贡献的人!

真挚地,

鱼子:)

4

1 回答 1

0

int(*p)[20]是指向 20 个整数数组的指针

int* y是一个指向 int 的指针。

当您递增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;    
}
于 2020-11-17T11:35:22.030 回答