C语言 指针与数组
/*处理多维数组的行*/int a, i;
int *p;
p = &a;
/*
* 书上说可以简写为 p = a
* 理由是根据一个公式 array等价于 *(array+i)
* 因此 &a等同于&(*(a + 0))又等价于&*a
* 又因为&和*可以抵消 所以最终等同于a
*/
书上的解释我不懂 求帮助,谢谢! 什么书就这代码?i 都没初始化 ,拿什么 放到a里去? hyolyn 发表于 2019-10-23 13:38
什么书就这代码?i 都没初始化 ,拿什么 放到a里去?
是我自己没写,我主要是想让你们解释下最下面的 本帖最后由 老坚果 于 2019-10-23 16:52 编辑
我不知道 但是我猜应该是因为&和*的优先级相同,所以从左往右算 先取*a的地址,再通过*取a的值。有点太跳脱了 我只能想到这里了
神TM简写。。。果然菜是原罪 老坚果 发表于 2019-10-23 16:50
我不知道 但是我猜应该是因为&和*的优先级相同,所以从左往右算 先取*a的地址,再通过*取a的值。有点太跳脱 ...
哈哈,感谢猜测。
本帖最后由 Y喜东东J 于 2019-10-23 21:15 编辑
?
p是指针,数组符号[] 也是指针, {:10_266:} 像这种问题,书上写的再多,我们说的再好,都不如你动手调试 #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;
} 获取第i行第一个元素的地址。其实就是获取第i行
页:
[1]