| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2236 人关注过本帖, 1 人收藏
标题:数组指针自增的问题
只看楼主 加入收藏
xiang__jie
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2011-8-31
结帖率:71.43%
收藏(1)
已结贴  问题点数:20 回复次数:7 
数组指针自增的问题
#include<stdio.h>
void main()
{
    int a[10] = {0,14,2,3,4,5,6,7,8,9};
    int *p = a;   
   
    printf("%d\n",(*p)++);                   printf("%x,%x\n",p,a);



    printf("%d\n",*(p++));                   printf("%x,%x\n",p,a);



   
    printf("%d\n",*(++p));                   printf("%x,%x\n",p,a);
   
}
    以上程序中 (*p)++ 没有改变指针的指向,为什么下一个pirntf语句中指针指向的值是1,1从哪里来 ?请高手给予解惑谢谢(小弟认为的答案应该是 0 0 2)!请指出分析思路的问题!
2011-08-31 04:03
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:7 
你的a数组被改变了,因为(*p)++的关系。0+1=1,所以出了一个1.
4        int a[10] = {0,14,2,3,4,5,6,7,8,9};
(gdb) s
5        int *p = a;  
(gdb) s
7        printf("%d\n",(*p)++);                   printf("%p,%p\n",p,a);
(gdb) s
0
0xbffff3e4,0xbffff3e4
11        printf("%d\n",*(p++));                   printf("%p,%p\n",p,a);
(gdb) s
1
0xbffff3e8,0xbffff3e4
16        printf("%d\n",*(++p));                   printf("%p,%p\n",p,a);
(gdb) p a
$1 = {1, 14, 2, 3, 4, 5, 6, 7, 8, 9}


[ 本帖最后由 pauljames 于 2011-8-31 06:26 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-31 06:16
xd1103121524
Rank: 2
等 级:论坛游民
帖 子:27
专家分:49
注 册:2011-8-29
收藏
得分:1 
楼上正解。。。。
2011-08-31 09:01
编程达人
Rank: 2
等 级:论坛游民
帖 子:62
专家分:66
注 册:2011-8-11
收藏
得分:1 
指针不容易呀
2011-08-31 09:15
Hujc71
Rank: 2
等 级:论坛游民
帖 子:49
专家分:65
注 册:2010-3-31
收藏
得分:3 
p=a;后*p就相当于a[0]!(*p)++就相当于a[0]=a[0]+1!数组中第一个元素变了,懂了吧!
2011-08-31 10:06
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:6 
    int a[10] = {0,14,2,3,4,5,6,7,8,9};
    int *p = a;   
    printf("%d\n",(*p)++);                   printf("%x,%x\n",p,a);
    printf("%d\n",*(p++));                   printf("%x,%x\n",p,a);
    printf("%d\n",*(++p));                   printf("%x,%x\n",p,a);
请楼主注意, a[0]的地址 给了指针p, 让指针p指向了数组a对吧!
那么 在第一句 printf("%d\n",(*p)++); 这一句是第一句输出, 你要了解的是 如何理解 (*p)++这一句的意思!
指针p现在指向的是 a[0]的元素地址!,.所以*p取 a[0]元素地址内容, 那么a[0]元素内容是多少? 是0吧!,然后在自增.
自增这么涉及到了 "先用后加",还是"先加后用"这个知识点! 这里是 "先用后加"。也就是说printf("%d\n",(*p)++);输出
内容为0,并且a[0]原来的地址内容加了1.所以在第二次printf("%d\n",*(p++));又是一个先用后加,懂吗`取a[0]内容,因为上
一次的printf输出使a[0]值为1输出了.,并且输出此次printf后,指针往后移了.
楼主的主要疑问 我想应该是 自增的两种形式没有理解,其实很简单多做做练习,慢慢就懂了,加油!
2011-08-31 13:03
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:2 
楼主的疑问不是增值和引用的先后问题,而是不经意改变了所指向的数组内容。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-31 18:00
快速回复:数组指针自增的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063392 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved