麦田守望者01 发表于 2018-11-9 16:39:46

c语言中的指针与数组的问题

#include <stdio.h>
int main()
{
int a={1,3,5,7,9,11,13,15,17,19,21,23};
int *p;
for(p=a;p<a+12;p++)                                 //使p依次指向下一个元素
{
if((p-a)%4==0)                                              //p移动4次后换行
printf("%4d",*p);                                             //输出p指向的元素的值
}
printf("\n");
return 0;
}


为什么不是每次输出元素后换行,而是输出四个元素后换行?,求大佬解答

beijudezixuan 发表于 2018-11-9 19:58:08

不怎么理解问题的描述,我运行出来,一共只有三个元素,还在同一行

ba21 发表于 2018-11-9 20:17:49

他这题意思就是 第0位开始每到第4位输出

p=a //用一个指针,指向二维数组a, 注意了a 是指针类型
p<a+12 // 由于数组在内存中是连存放的,所以 后面的地址肯定比前面小, a+12 指的是23这个数后面的地址(a+11 是 23的地址)
(p-a)%4// p-a 返回的是几个int 不是 比如172-168 4个字节,而是1个int

麦田守望者01 发表于 2018-11-9 21:52:21

beijudezixuan 发表于 2018-11-9 19:58
不怎么理解问题的描述,我运行出来,一共只有三个元素,还在同一行

打漏了,if语句后面还有printf("\n");

麦田守望者01 发表于 2018-11-9 21:55:25

ba21 发表于 2018-11-9 20:17
他这题意思就是 第0位开始每到第4位输出

p=a //用一个指针,指向二维数组a, 注意了a 是指针 ...

已经明白了,原来if语句中的p-a的值不是直接地址相减,而是地址的差再除以元素长度

麦田守望者01 发表于 2018-11-9 22:01:51

ba21 发表于 2018-11-9 20:17
他这题意思就是 第0位开始每到第4位输出

p=a //用一个指针,指向二维数组a, 注意了a 是指针 ...

其实在if语句括号后漏打了printf("\n");问题是为什么不是每输出一个元素后换行,而是输出四个元素后换行?
页: [1]
查看完整版本: c语言中的指针与数组的问题