学习指针的时候一个思考题不知道怎么解
#include<stdio.h>void main()
{
int*p,i,a;
p=a;
for(i=0;i<2;i++)
{
scanf("%d",p++);
}
printf("\n");
for(i=0;i<10;p++,i++)
{
printf("%d",*p,i);
}
}
本帖最后由 Crazy迷恋. 于 2013-8-1 23:14 编辑
printf("%d",*p,i);?这是神马情况
printf("%d",*(p+i));是这样吧?
这个题目就是p指向了数组a我们知道 数组在内存是一块连续存储的空间地址的++便是地址的改变。
不过楼主没有说出哪里有疑问。所以我也无从答起。只能说说这些了。
for(i=0;i<10;p++,i++)
{
printf("%d",*p,i);
}
这句很奇怪。为什么这么写呢?只有一个%d啊?p已经向后移动 printf("%d",*(p+i));这样也没啥意义 估计是楼主漏了一个%d
#include <stdio.h>
void main()
{
int *p , i , a;
p = a;
for(i = 0 ; i < 2 ; i ++)
{
scanf("%d", p++);
}
puts("\n");
for(i = 0 , p = a; p <= (a + i),i < 2 ; i++ , p++)
{
printf("[%d] = %d\n", i , *p);
}
}
我从新打了一遍 和上面的楼的差不多 但是在最后的for语句中 我添加了p = a, p <= (a + i), 用来确定p的地址范围 这样结果就是会出现两个数组元素和他们的变量 1. 2次for循环的次数不相等。
2. 第一次for循环后p值没有恢复到初值。
3. 第二个printf格式错误。
楼主要多调试啊:lol::lol: 主要问题就是,第一次循环指针已经在数组结尾了,你要输出数组的值,要重新让指针指到第一个元素。 SilverMagic 发表于 2013-8-1 23:24 static/image/common/back.gif
楼主的代码有点小问题,下面是我修改后的代码,有注释
我还是有几个不明白的 为什么跳出for语句后为什么还要重新将定义数组 printf("[%d]=%d\n",i,*p);
这个语句为什么要[%d]=%d这么的写 %d %d为什么输出后会是乱码 在for语句下的pinrtf("\n")这句话是干什么用的 本帖最后由 黑龍 于 2016-1-28 15:31 编辑
943566987 发表于 2013-8-2 20:05
我还是有几个不明白的 为什么跳出for语句后为什么还要重新将定义数组 printf("[%d]=%d\n",i,*p);
这 ...
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p,i,a;
for(i=0;i<10;i++)/* 初始化数组 */
a=NULL;
p=a;
for(i=0;i<2;i++)
scanf("%d",p++);
p=a;
for(i=0;i<2;i++,p++)
printf("%d = %d\n",*p,a);
system("pause");
return 0;
}
这样就可以了吧 至于跳出for后为什么要重新定义数组
嘿嘿
因为你只将这个指针p指向了a一次,还是在开头的时候
那么你这个p++就等于a;不过呢,你的a的下标递增了,你的指针p没有增加。
但是你的p的指向的地址还保存着
不过你到了第二个for的时候
你的p还往下递增。那么 p就指向了a后面的数字
语文不太好 哈哈
printf("\n");是换行啊
写%d %d也没问题
不过乱码的原因有两个 第一个你跳出了for后 没有重新将p指向到a
第二个就是你的数组只给两个下表赋值了 0 和 1
后面的值都不是一定的 这样你打印出来的话就是乱码啦
还有 指针不是很难理解吧。。。。。
而且 你的main行数写得不太标准哈{:10_266:}
PS:你的代码有些浪费空间了
你可以这样改进
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p,i,a;
p=a;
for(i=0;i<2;i++)
scanf("%d",p++);
p=a;
for(i=0;i<2;i++,p++)
printf("%d = %d\n",*p,a);
system("pause");
return 0;
}
还有 如果将p打印出来的话打印的是地址哦~
打印*p才是打印出p指向的数据
页:
[1]