虽然我已经学习并使用过许多高级语言,但是今天当我刷新我的 C 技能时,这个老问题再次向我袭来。当我们谈论 C 中的指针时,简单的指针很容易理解,但对我来说数组指针没有意义(因为我永远无法理解它们)。
int x[] = {1, 2, 3}; int *y[] = {4, 5, 6};`
在上面的代码中,如果我执行
printf("%u", x)
,它将给出 x 数组的第一个元素的地址,这清除了 x 是指向数组 x 的指针的事实。同样,如果我这样做 printf("%u", y)
它将给出 y 数组第一个元素的地址。
那么是什么让 x 与 y 不同呢?有人可以解释一下吗?
P.s.我不是在问常规指针,我非常熟悉指针的概念。
int x[] = {1, 2, 3};
定义 3 个整数的数组int *y[] = {4, 5, 6}
定义了由3个指针组成的数组,并用整数转换将其初始化为指针,这基本上没有任何意义。在这样的数组中,您想要存储对 objectsint a = 4,b = 5,c = 6;
int *y[] = {&a, &b, &c};
在上面的代码中,如果我执行 printf("%u", x) ,它将给出地址 x 数组的第一个元素
不,当您使用错误的格式说明符时,它会调用未定义的行为。你需要 `printf("%p", (void *)x);