#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);
至于那些表达式“是什么”,它们是地址——分别是数组开头和数组第三个元素的地址。