943566987 发表于 2013-8-1 22:30:27

学习指针的时候一个思考题不知道怎么解

#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);
}
}

SilverMagic 发表于 2013-8-1 22:30:28

Crazy迷恋. 发表于 2013-8-1 23:12:18

本帖最后由 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

SilverMagic 发表于 2013-8-1 23:24:57

guodanaodai 发表于 2013-8-2 09:43:03

#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的地址范围 这样结果就是会出现两个数组元素和他们的变量

nick_yang 发表于 2013-8-2 09:47:14

1. 2次for循环的次数不相等。
2. 第一次for循环后p值没有恢复到初值。
3. 第二个printf格式错误。

楼主要多调试啊:lol::lol:

ssyss501 发表于 2013-8-2 17:20:11

主要问题就是,第一次循环指针已经在数组结尾了,你要输出数组的值,要重新让指针指到第一个元素。

943566987 发表于 2013-8-2 20:05:49

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 14:39:52

本帖最后由 黑龍 于 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]
查看完整版本: 学习指针的时候一个思考题不知道怎么解