分页: 1 / 1
指针赋值的问题
发表于 : 2012-02-27 10:44
由 7rack
有结构体定义
代码: 全选
struct sk
{
int a;
float b;
}data;
int *p;
使p指向data中的a域的赋值语句,*p=data.a对不对?
Re: 指针赋值的问题
发表于 : 2012-02-27 11:31
由 zhu071011
不对吧!你只是把data.a中的内容付给了P所指的区域。而不是把p指向data.a。正确的做法应该是
p=&(data.a)
Re: 指针赋值的问题
发表于 : 2012-02-27 12:32
由 youqika
不对,ls正解
Re: 指针赋值的问题
发表于 : 2012-02-27 18:02
由 7rack
zhu071011 写了:不对吧!你只是把data.a中的内容付给了P所指的区域。而不是把p指向data.a。正确的做法应该是
p=&(data.a)
就是
和
的影响不一样?
Re: 指针赋值的问题
发表于 : 2012-02-28 19:58
由 lwbskfish
7rack 写了:zhu071011 写了:不对吧!你只是把data.a中的内容付给了P所指的区域。而不是把p指向data.a。正确的做法应该是
p=&(data.a)
就是
和
的影响不一样?
当然不等价。
Re: 指针赋值的问题
发表于 : 2012-02-28 20:19
由 xw_y_am
学习了,mark 一下
Re: 指针赋值的问题
发表于 : 2012-03-23 6:33
由 redpigcool
7rack 写了:有结构体定义
代码: 全选
struct sk
{
int a;
float b;
}data;
int *p;
使p指向data中的a域的赋值语句,*p=data.a对不对?
楼主的做法是会造成段违例的。
当你声明一个 int *p 的时候,p 所指向的位置是没有初始化的,也就是一个垃圾值。
当你赋值的时候*p=data.a, 指针p被解除引用,也就是要访问p所指向的地址。
由于这个地址是未定义的,一般情况下会段违例。如果没有,那么就会修改一个内存中一块随机地址,非常危险。
Re: 指针赋值的问题
发表于 : 2012-03-23 8:31
由 eexpress
可以这样指的。只是自己保证数据没越界。写法是2楼的。要取地址。
学c的时候,看下编译后的汇编,容易理解的。
Re: 指针赋值的问题
发表于 : 2012-03-23 10:08
由 7rack
谢谢 各位大侠的指点。我是该看看编译原理了,虽然是业余编程
