鱼C论坛

 找回密码
 立即注册
查看: 9325|回复: 26

一个指针不容易发现的错误

[复制链接]
发表于 2014-9-21 13:55:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>      
void main()
{
int *p,i,a[10];
p=&a[0];                                  //还可以把p=a;这完全是一样的
for(i=0;i<10;i++)
{
scanf("%d",p++);
}
printf("\n");
for(p=&a[0];p<(a+10);p++)   
printf("%d",*p);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-21 14:47:23 | 显示全部楼层
for(p=&a[0];p<(a+10);p++)
应该是这句吧  这句的P  是以地址为单位的 应该是 p+sizeof(p)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-21 16:17:15 | 显示全部楼层
说清楚点   看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-27 21:14:41 | 显示全部楼层
for(p=&a[0];p<(a+10);p++)里面的p=&a[0]这句应该是重复定义了吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-12 12:48:28 | 显示全部楼层

不重复定义,如何循环啊,肯定要重复定义啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 23:14:17 | 显示全部楼层
错误在哪里啊!我觉得没错误啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-26 16:03:26 | 显示全部楼层
c语言的奥秘 发表于 2014-10-12 12:48
不重复定义,如何循环啊,肯定要重复定义啊

不用重新定义,可以这样,for( ; p<(a+10); p++)    for里面的条件可以不用全写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-27 10:06:14 | 显示全部楼层
for( i = 0,p=a;i < 10;i++,p++)

改下这里就好了,不知道是不是这个问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-16 18:34:59 | 显示全部楼层
第一个循环里面的p++改成p+i;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-12-16 18:35:49 | 显示全部楼层
因为p指向的是数组的首地址,首地址是个常数不能改变的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-17 14:27:30 | 显示全部楼层
没结果了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-19 17:35:16 | 显示全部楼层
到底错哪了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-11 04:23:58 | 显示全部楼层
玛德,这个问题也纠结我老半天了。什么情况啊。没人能解决吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-18 08:29:37 | 显示全部楼层
#include<stdio.h>      
void main()
{
        int *p,i,a[10];
        p=a;                                 
        for(i=0;i<10;i++)
        {
                scanf("%d",p++);
        }
        printf("\n");
        for(p=(a+0);p<(a+10);p++)   
                printf("%d ",*p);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-18 16:10:19 | 显示全部楼层
本帖最后由 ?Цtm 于 2015-1-18 16:12 编辑

数组本身就是指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-30 19:46:49 | 显示全部楼层
p++错了吧,循环完成一次,指正p应该指向下一个地址,而p++是在原地址+1,并不是下一个地址的正确位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2015-3-31 10:14:09 | 显示全部楼层
虚心学习,楼主好人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 12:00:07 | 显示全部楼层
我看了下存储地址,发现输入的数值打印的时候,存储地址取值不是从原来的地址取值了,变成之前的存储地址后面的地址了,所有应该在第二个循环前面加个p = a,让程序从开始地址重新取值。刚学习,不知道表达的清楚不。下面是我的程序,你们可以试下没有p=a的地址。
#include <stdio.h>

void main()
{
        int *p, i, a[10];

        p = a;

        for( i=0; i < 10; i++ )
        {
                scanf("%d", p++);
        }

        for( i=0; i < 10; i++, p++ )
        {
                printf("%x ", p);
        }
        printf("\n");
        p = a;
        for( i=0; i < 10; i++, p++ )
        {
                printf("%d ", *p);
        }
        printf("\n");
        for( i=0; i < 10; i++, p++ )
        {
                printf("%x ", p);
        }
        printf("\n");       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 12:15:26 | 显示全部楼层

没有发现问题哟 ??
火火火.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-2 16:11:43 | 显示全部楼层
看看再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 06:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表