|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ C指针的传递问题
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
888
人关注过本帖
标题:
C指针的传递问题
只看楼主
加入收藏
qingke
等 级:
新手上路
帖 子:11
专家分:3
注 册:2011-2-24
第
11
楼
收藏
得分:0
回复 2楼 犬虫门心
p0=p;
p=(p+1);
(p+1)=p0;
后面的这种写法就出现错误 error C2106: “=”: 左操作数必须为左值
在(p+1)=p0那行的样子
2011-02-24 21:04
举报帖子
使用道具
赠送鲜花
丞相杀手
等 级:
侠之大者
帖 子:203
专家分:462
注 册:2011-1-11
第
12
楼
收藏
得分:0
回复 楼主 qingke
问题的关键在于 “=”这个运算符的 左操作数 必须是在你程序中声明过的变量(指针也是变量),你的 (p+1) 是你自己写的表达式,是不能作为那个背赋值的对象的
斗不过疯子,不参与争论。
2011-02-24 21:22
举报帖子
使用道具
赠送鲜花
丞相杀手
等 级:
侠之大者
帖 子:203
专家分:462
注 册:2011-1-11
第
13
楼
收藏
得分:10
p0=p;
p=(p+1);
(p+1)=p0;
你要注意一个语义的问题,不管p指向什么地址,p+1永远是指向p地址之后的地址
现在看你在程序中做了什么
p0 = 0;//设置中间变量,没有问题
p = p + 1; //将p指向的地址向后移动没有问题
(p+1)=p0; // 这个貌似要改变语义,计算机办不到
斗不过疯子,不参与争论。
2011-02-24 21:33
举报帖子
使用道具
赠送鲜花
qingke
等 级:
新手上路
帖 子:11
专家分:3
注 册:2011-2-24
第
14
楼
收藏
得分:0
回复 12楼 丞相杀手
明白了,谢谢!
但是我用
*p0=*p;
*p=*(p+1);
*(p+1)=*p0;
这样的话
*(p+1)之前也是没有声明,但是用VS2010编译没有出现语法错误
2011-02-24 21:40
举报帖子
使用道具
赠送鲜花
丞相杀手
等 级:
侠之大者
帖 子:203
专家分:462
注 册:2011-1-11
第
15
楼
收藏
得分:0
以下是引用
qingke
在2011-2-24 21:40:35的发言:
明白了,谢谢!
但是我用
*p0=*p;
*p=*(p+1);
*(p+1)=*p0;
这样的话
*(p+1)之前也是没有声明,但是用VS2010编译没有出现语法错误
这样语法上是没有问题,不过尽量还不要这样用,使用指针引用未声明的内存地址是很容易出问题的(因为编译器不检查这样的错误),如果p+1指向的地址是另外一个变量的地址,那样的话,程序可能会崩溃的
[
本帖最后由 丞相杀手 于 2011-2-24 22:15 编辑
]
斗不过疯子,不参与争论。
2011-02-24 21:59
举报帖子
使用道具
赠送鲜花
qingke
等 级:
新手上路
帖 子:11
专家分:3
注 册:2011-2-24
第
16
楼
收藏
得分:0
回复 15楼 丞相杀手
p0=0;
p1=0;
······
p1=(p+1);
p0=p;
p=(p+1);
p1=p0;
加上一个p1
然后这样就没问题了吧
不过这样还是没达到我想要的交换p跟p+1的值
而一旦我使用
struct student *p;
p=stu
//stu是我已经定义的一个结构体数组名
p0=0;
p1=0;
*p1=*(p+1);
*p0=*p;
*p=*(p+1);
*p1=*p0;
虽然程序可以编译但是在运行的时候当运行到*p1=*(p+1);这一步的时候系统就会提示内存冲突
我已经给p1赋值了,但是为什么还是会出问题呢?
其中p是指向一个结构体数组的首位,那p+1应该是指向stu[1]的,那这样子p1指向的内容应该是stu[1]的内容,可是运行的时候为什么p1是错误的指针呢?
[
本帖最后由 qingke 于 2011-2-24 22:37 编辑
]
2011-02-24 22:27
举报帖子
使用道具
赠送鲜花
16
2/2页
1
2
快速回复:
C指针的传递问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.027709 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved