鱼C论坛

 找回密码
 立即注册
查看: 3611|回复: 9

关于指针~(*和&)的疑惑。。

[复制链接]
发表于 2012-8-27 11:11:25 | 显示全部楼层 |阅读模式
5鱼币
#include <stdio.h>
void main()
{
int a,b;
int *pointer_1,*pointer_2;
a=100;
b=10;

pointer_1=&a;    //如果改写成    *pointer_1=a;   就出错。。。为什么。。
pointer_2=&b;
    //如果改写成      *pointer_2=b;  就出错。。。为什么。。

printf("%d,%d\n",a,b);
printf("%d,%d\n",*pointer_1,*pointer_2);
}      //第一个程序
------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
void swap(int *p1,int *p2);
void main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d %d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if (a<b)
{
  swap(pointer_1,pointer_2);
}
printf("\n%d>%d\n",a,b);
}
void swap(int *p1,int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;    // 这里怎么*p2=temp; 就不会出错呢?

}   

错误提示是未被初始化。。百度查不到相关资料

最佳答案

查看完整内容

int *pointer_1; 未初始化的局部变量pointer_1内部存放着一个随机值。也就是说指针pointer_1指向一个随机的内存区域 接着*pointer_1=a;向随机内存写数据,这个行为被windows操作系统视为违规,所以报错 int *pointer_1; 未初始化的局部变量pointer_1内部存放着一个随机值。 pointer_1 = &a;现在pointor指向a,不是指向随机内存,以后就可以执行如:*pointor = 7;等操作了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-27 11:11:26 | 显示全部楼层
本帖最后由 仰望天上的光 于 2012-8-27 11:42 编辑

int *pointer_1;
未初始化的局部变量pointer_1内部存放着一个随机值。也就是说指针pointer_1指向一个随机的内存区域
接着*pointer_1=a;向随机内存写数据,这个行为被windows操作系统视为违规,所以报错


int *pointer_1;
未初始化的局部变量pointer_1内部存放着一个随机值。
pointer_1 = &a;现在pointor指向a,不是指向随机内存,以后就可以执行如:*pointor = 7;等操作了

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-27 11:35:26 | 显示全部楼层
应该是引文*的优先级比=的高,*pointer_1=a;的运算顺序是,先通过*运算取出pointer_1这个值得地址存放的数据。而你pointer_1还没赋值呢。懂了吧。优先级的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-27 11:36:24 | 显示全部楼层
要给我鱼币啊,嘿嘿。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-27 11:37:10 | 显示全部楼层
我也是刚要开始学指针了,交个朋友,一起学?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-27 11:41:09 | 显示全部楼层
void swap(int *p1,int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;    // 这里怎么*p2=temp; 就不会出错呢?
}   
根据前面的解释,出不出错主要取决于p2指向的是什么。
如果你调用的时候是这样的,
int *p1,*p2;
swap (p1,p2);则一定报错
但题中调用的时候p1,p2都指向已经分配的存储空间,所以不会报错。


C语言里,使用指针的时候经常出现的错误就是对一个“野指针”(就是不指向已分配的内存单元的指针)进行操作,以上的问题都属于对“野指针”进行操作。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-27 12:10:43 | 显示全部楼层
个人见解啊,可能有不对的地方!
pointer_1=&a;    //如果改写成    *pointer_1=a;   就出错。。。为什么。。
                                 pointer_1本身是个指针,a是一个int型    你想想一个整型给以个指针类型赋值能不出错?
void swap(int *p1,int *p2)
{
int temp;
temp = *p1;    temp是int型,p1是指向int型数据的指针,前面加*号是取p1指向的内容,所以这个语句的意思是取p1指向的内容给temp,我的想法貌似是对的!不知道你能不能理解!
*p1 = *p2;
*p2 = temp;    // 这里怎么*p2=temp; 就不会出错呢?
}   
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-27 13:15:26 | 显示全部楼层
晕,不还是优先级的顺序啊..................
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-27 13:16:02 | 显示全部楼层
楼主明明是搞错优先级了....
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-27 13:16:28 | 显示全部楼层
为什么定义两个指针,第一个虽然结果不对,但可以访问,第二个总是无法访问呢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 20:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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