#include <stdio.h>
struct audiocd {
    char title[256];
    int trackNo;
    char type;
    char publisher[256];
};
int main() {
    struct audiocd* cdptr;
    struct audiocd cdarray[4];
    cdptr = cdarray;

    printf("%d\n", &(cdarray[2]));
    printf("%d\n", cdptr);
}

什么是cdarray[2] & cdptr
编辑:谢谢,但如果printf("%d\n", &cdarray)4291520,是否可以跟踪printf("%d\n", &(cdarray[2])) & printf("%d\n", cdptr)

最佳答案

程序的总体效果只是未定义的行为。它将地址传递给printf,但是使用%d转换,它需要一个int。不匹配会导致未定义的行为。
在int和指针大小相同的典型情况下,它会打印出cdptr中的地址和cdarray[2]的地址。
如果你想打印出这些地址,最明显的方法是:

printf("%p", (void *)&cdarray[2]); // (void *)cdarray+2
printf("%p", (void *)cdptr);

至于那些表达式“是什么”,它们是地址——分别是数组开头和数组第三个元素的地址。

09-07 11:36