分页: 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)
就是

代码: 全选

*p=data.a

代码: 全选

p=&data.a
的影响不一样?

Re: 指针赋值的问题

发表于 : 2012-02-28 19:58
lwbskfish
7rack 写了:
zhu071011 写了:不对吧!你只是把data.a中的内容付给了P所指的区域。而不是把p指向data.a。正确的做法应该是
p=&(data.a)
就是

代码: 全选

*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
谢谢 各位大侠的指点。我是该看看编译原理了,虽然是业余编程 :em09