C 中 int x[] 和 int *x[] 之间的实际区别是什么?

问题描述 投票:0回答:1

虽然我已经学习并使用过许多高级语言,但是今天当我刷新我的 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.我不是在问常规指针,我非常熟悉指针的概念。

c pointers array-pointer
1个回答
0
投票
  1. int x[] = {1, 2, 3};
    定义 3 个整数的数组
  2. int *y[] = {4, 5, 6}
    定义了由3个指针组成的数组,并用整数转换将其初始化为指针,这基本上没有任何意义。在这样的数组中,您想要存储对 objects
  3. 的引用(指针)
int a = 4,b = 5,c = 6;
int *y[] = {&a, &b, &c};

在上面的代码中,如果我执行 printf("%u", x) ,它将给出地址 x 数组的第一个元素

不,当您使用错误的格式说明符时,它会调用未定义的行为。你需要 `printf("%p", (void *)x);

© www.soinside.com 2019 - 2024. All rights reserved.