| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1571 人关注过本帖
标题:指针变量赋初值疑问
只看楼主 加入收藏
南国迦叶
Rank: 2
等 级:论坛游民
帖 子:46
专家分:20
注 册:2010-7-9
结帖率:88.24%
收藏
已结贴  问题点数:4 回复次数:4 
指针变量赋初值疑问
#include<stdio.h>
 int swap(int *p1,int *p2)
 {
     int *p;        /*第4行*/           
     p=p1;          /*第5行*/   
     p1=p2;         /*第6行*/        
     p2=p;          /*第7行*/   
 }
 main()
 {   
     int *t1,*t2,a,b;
     scanf("%d,%d",&a,&b);
     getchar();
     t1=&a;
     t2=&b;
     if (a<b)
     {
         swap(t1,t2);
     }
     printf("a=%d,b=%d\n",a,b);
     getchar();
 }
疑问:对于程序中所示的第4到第7行,教材上讲如果改成*p=*p1;*p1=*p2;*p2=*p;就会报错,说是指针变量p没有确定的地址,它的值是不可预见的,因而*p指向的单元也是不可预见的,对*p赋值可能会破坏系统的正常工作状态。我试了下,确实如此。为什么示例中同样是先定义*p也没有给p赋初值,而运行不会报错呢,难道是由于其后的三个不一样的赋值语句造成的。不明白!(这里定义p为指针变量不也是没有确定的地址吗)???
搜索更多相关主题的帖子: include 
2012-11-21 21:51
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:1 
编译器的问题  他只检查语法错误

我要成为嘿嘿的黑客,替天行道
2012-11-21 22:00
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
对于指针 他有三个属性
1.地址值 p
2.地址值指向的值 *p
3.地址值的引用规则 p+1后*(p+1)的问题
 这个问题 你早问过了,我也在帖子里也给答了  你就是看不见 看不见  再给你看一次
用个实例
int *p
这个个声明是说p是指向int型的指针
那么他的属性分析就是
1.p代表的是地址值
2.*p指向的是int类型的 *P进行的是 int类型的计算
3.地址的引用规则说的是  对地址值的运算 用运算符*的指向问题
比如*(p+1)
p+1代表的含义就是对p的地址值加sizeof(int)   *(p+1)指向的就是下一个数据了

我要成为嘿嘿的黑客,替天行道
2012-11-21 22:01
小书虫2号
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2012-11-19
收藏
得分:1 
编译器所处的环境也会影响,有些相关智能处理软件甚至帮你修忽略错误
2012-11-21 22:32
jk_love
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:196
专家分:965
注 册:2012-10-22
收藏
得分:1 
我觉得这个就没问题,和编译器也没关系
2012-11-22 11:32
快速回复:指针变量赋初值疑问
数据加载中...
 
   



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

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