Y喜东东J 发表于 2019-10-22 18:50:54

C语言 指针与数组

/*处理多维数组的行*/
    int a, i;
    int *p;
    p = &a;

    /*
   * 书上说可以简写为 p = a
   * 理由是根据一个公式 array等价于 *(array+i)
   * 因此 &a等同于&(*(a + 0))又等价于&*a
   * 又因为&和*可以抵消 所以最终等同于a
   */

书上的解释我不懂 求帮助,谢谢!

hyolyn 发表于 2019-10-23 13:38:26

什么书就这代码?i 都没初始化 ,拿什么 放到a里去?

Y喜东东J 发表于 2019-10-23 16:37:00

hyolyn 发表于 2019-10-23 13:38
什么书就这代码?i 都没初始化 ,拿什么 放到a里去?

是我自己没写,我主要是想让你们解释下最下面的

老坚果 发表于 2019-10-23 16:50:53

本帖最后由 老坚果 于 2019-10-23 16:52 编辑

我不知道 但是我猜应该是因为&和*的优先级相同,所以从左往右算 先取*a的地址,再通过*取a的值。有点太跳脱了 我只能想到这里了

神TM简写。。。果然菜是原罪

Y喜东东J 发表于 2019-10-23 16:59:38

老坚果 发表于 2019-10-23 16:50
我不知道 但是我猜应该是因为&和*的优先级相同,所以从左往右算 先取*a的地址,再通过*取a的值。有点太跳脱 ...

哈哈,感谢猜测。

Y喜东东J 发表于 2019-10-23 17:00:38

本帖最后由 Y喜东东J 于 2019-10-23 21:15 编辑

?

hyolyn 发表于 2019-10-24 04:06:43

p是指针,数组符号[] 也是指针,

python万 发表于 2019-10-24 08:58:43

{:10_266:}

bin554385863 发表于 2019-10-24 10:01:31

像这种问题,书上写的再多,我们说的再好,都不如你动手调试

记忆的欠片 发表于 2019-10-24 10:38:40

#include <stdio.h>

int main(void)
{
    int a = {0};
    printf("a is %p\n", a);
    printf("a is %p\n", &a);
    return 0;
}
由这个例子可以知道数组名是数组第一个元素的地址。
二维数组。每一行为一个数组
第一行为第一个元素,而这个元素为第一行数组的地址。看下面例子
#include <stdio.h>

int main(void)
{
    int a = {0};
    for (int i = 0; i < 6; i++){
    printf("a[%d] is %p\n", i, a);
    printf("a[%d] is %p\n", i, &a);
    }
    return 0;
}

记忆的欠片 发表于 2019-10-24 10:39:58

获取第i行第一个元素的地址。其实就是获取第i行
页: [1]
查看完整版本: C语言 指针与数组