指针赋值的问题

软件和网站开发以及相关技术探讨
回复
头像
7rack
帖子: 96
注册时间: 2011-08-17 22:49

指针赋值的问题

#1

帖子 7rack » 2012-02-27 10:44

有结构体定义

代码: 全选

struct sk
{ 
int a;
float b;
}data;
int *p;
使p指向data中的a域的赋值语句,*p=data.a对不对?
头像
zhu071011
帖子: 46
注册时间: 2010-04-16 18:18

Re: 指针赋值的问题

#2

帖子 zhu071011 » 2012-02-27 11:31

不对吧!你只是把data.a中的内容付给了P所指的区域。而不是把p指向data.a。正确的做法应该是
p=&(data.a)
头像
youqika
帖子: 720
注册时间: 2008-09-25 20:56

Re: 指针赋值的问题

#3

帖子 youqika » 2012-02-27 12:32

不对,ls正解
UCHIHA
运气是为白痴准备的
头像
7rack
帖子: 96
注册时间: 2011-08-17 22:49

Re: 指针赋值的问题

#4

帖子 7rack » 2012-02-27 18:02

zhu071011 写了:不对吧!你只是把data.a中的内容付给了P所指的区域。而不是把p指向data.a。正确的做法应该是
p=&(data.a)
就是

代码: 全选

*p=data.a

代码: 全选

p=&data.a
的影响不一样?
lwbskfish
帖子: 323
注册时间: 2007-02-05 18:09

Re: 指针赋值的问题

#5

帖子 lwbskfish » 2012-02-28 19:58

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

代码: 全选

*p=data.a

代码: 全选

p=&data.a
的影响不一样?
当然不等价。
头像
xw_y_am
帖子: 3333
注册时间: 2009-05-08 14:18
系统: Arch
来自: 河南新乡
联系:

Re: 指针赋值的问题

#6

帖子 xw_y_am » 2012-02-28 20:19

学习了,mark 一下
Linux 相关链接大杂烩

代码: 全选

if(read) {
    if(practise) return g☘☘d;
    else return w☘☘d;
} else {
    return t☘☘d;
}
redpigcool
帖子: 47
注册时间: 2011-10-22 6:52

Re: 指针赋值的问题

#7

帖子 redpigcool » 2012-03-23 6:33

7rack 写了:有结构体定义

代码: 全选

struct sk
{ 
int a;
float b;
}data;
int *p;
使p指向data中的a域的赋值语句,*p=data.a对不对?
楼主的做法是会造成段违例的。

当你声明一个 int *p 的时候,p 所指向的位置是没有初始化的,也就是一个垃圾值。

当你赋值的时候*p=data.a, 指针p被解除引用,也就是要访问p所指向的地址。

由于这个地址是未定义的,一般情况下会段违例。如果没有,那么就会修改一个内存中一块随机地址,非常危险。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 指针赋值的问题

#8

帖子 eexpress » 2012-03-23 8:31

可以这样指的。只是自己保证数据没越界。写法是2楼的。要取地址。

学c的时候,看下编译后的汇编,容易理解的。
● 鸣学
头像
7rack
帖子: 96
注册时间: 2011-08-17 22:49

Re: 指针赋值的问题

#9

帖子 7rack » 2012-03-23 10:08

谢谢 各位大侠的指点。我是该看看编译原理了,虽然是业余编程 :em09
回复