困扰很久的白痴问题!

bigbaddy007 2011-03-04 09:23:43
int *p=null;

int i=5;

*p=i;

p=&i;

*p=&i;

p=i;




上述各种赋值方法,到底何区别?大侠··
...全文
200 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwfde 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lanxue_1988 的回复:]

*p=i;和p=&i;一样的...

*p=&i;和p=i;一样的...不过p=i要类型转换下p=(int*)i;

多看看指针相关的内容吧...
[/Quote]二楼上面说的没一句是对的。
*p =i p =&i 怎能一样呢?前者是指针p已经指向一个有效地址,然后把指向的地址赋值为与i相同的值,实际是有内存复制的过程,后者是将指针p直接指向变量i所在的内存,改变了指针的指向,并没有复制数据。
再看后面,*p =&i ,p =(int *)i
前者p仍然已指向(假设,若非就出错)一个有效地址,将这个地址里的内容赋值为i的地址,后者是改变指针p的指向为变量i的内容,这两个都意义不大,假设:变量i地址为1FFF0,其内容是整数10,那么,*p =&i 指针指向的内容变成1FFF0,p =(int *)i,指针指向转为10 这个地址,而地址10处的内容是什么就完全不知道了……二楼纯属误人子弟,像这样的事情我发现这个论坛还有不少,希望大家能多思考,把正确的东西讨论出来,不要让错误的结论流传起来。
bigbaddy007 2011-03-04
  • 打赏
  • 举报
回复
现在从事.NET开发,突然觉得.net太白痴,就想学学以前读书时的C语言和数据结构。


回复11楼的兄弟,我其实以前也想从事C++或汇编的,早就认识了他的强大,但是无奈老师讲过一遍汇编,让我从清晰逐渐走向糊涂,然后走向深渊,最后放弃。。。现在汇编的书都给卖了··其余的C语言和C++还留着···哎·····
赵4老师 2011-03-04
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
碎碎念 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liaoyibiao1987 的回复:]

引用 2 楼 lanxue_1988 的回复:

*p=i;和p=&i;一样的...

*p=&i;和p=i;一样的...不过p=i要类型转换下p=(int*)i;

多看看指针相关的内容吧...


我也知道是一样的说法,但是,不明白其中的机制,举例说明下,各个时候 P 、I各个的值,和类型!
谢谢了~~~~~~~~~~
[/Quote]

额,,,刚才我说的不对...差点误人子弟- -


其实指针p存储的是内存的地址....通过*p来访问该地址存储的数据
int *p=null; //p=0;
int i=5; //变量i=5;假设i的内存地址:0x00abcedf
*p=i; //地址为0的内存区域被赋值5...这句有问题...
p=&i;//p=0x00abcedf,即i的内存地址..这句没问题...
*p=&i;//p指向的内存区域被赋值0x00abcedf也需要类型转化*p=(int)&i;
p=i; //这句需要类型转换...p=(int*)i....p=5
莫名的默默 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 liaoyibiao1987 的回复:]

C/C++ code
int *p=&i 和 *p=&i


前一个的意思是不是可以大概写成这样 int *(p=&i) / 后一个就是错的了吗?如果i变量内存里面恰好也是个指针类型的就可以了如i的值为0000fff00 是吗?
[/Quote]

int *p = &i; 这叫做 定义时 赋值
展开看
int *p;
p = &i;

*p = &i;
没有这么干的
bigbaddy007 2011-03-04
  • 打赏
  • 举报
回复
int *p=&i 和 *p=&i


前一个的意思是不是可以大概写成这样 int *(p=&i) / 后一个就是错的了吗?如果i变量内存里面恰好也是个指针类型的就可以了如i的值为0000fff00 是吗?
bigbaddy007 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lanxue_1988 的回复:]

*p=i;和p=&i;一样的...

*p=&i;和p=i;一样的...不过p=i要类型转换下p=(int*)i;

多看看指针相关的内容吧...
[/Quote]

我也知道是一样的说法,但是,不明白其中的机制,举例说明下,各个时候 P 、I各个的值,和类型!
谢谢了~~~~~~~~~~
rwjlqn 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wizard_tiger 的回复:]
C/C++ code

int *p=null;
int i=5;

*p=i;//这个是对指针P所指的内存位置赋值(要是p为野指针或指null的话会报错)
p=&i;//这个是把i的地址赋给p
*p=&i;//这个类型不匹配
p=i;//这个类型不匹配
[/Quote]


正解~~
quwei197874 2011-03-04
  • 打赏
  • 举报
回复
int *p=null;-----整形指针p赋值为空

int i=5;-----整形i赋值为5

*p=i;----指针p解引用用变量i赋值

p=&i;----指针p指向整形变量i的地址

*p=&i;--错误

p=i; --错误
不同类型变量不能互相赋值
wizard_tiger 2011-03-04
  • 打赏
  • 举报
回复

int *p=null;
int i=5;

*p=i;//这个是对指针P所指的内存位置赋值(要是p为野指针或指null的话会报错)
p=&i;//这个是把i的地址赋给p
*p=&i;//这个类型不匹配
p=i;//这个类型不匹配
bigbaddy007 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yuyan_linger 的回复:]

C/C++ code

int *p=null;

int i=5;

*p=i; //出错 还没有指向某个地址 就取值了

p=&i; //对的 最常见的用法

*p=&i; //类型不一致

p=i; //类型不一致 出错
[/Quote]

第一个我到某本书上看到过这个用法,第三个我看过***p=&i的用法, 就是前面有三个*;
麻烦解释下,是书上的错误吗?我打算换一本书·
碎碎念 2011-03-04
  • 打赏
  • 举报
回复
*p=i;和p=&i;一样的...

*p=&i;和p=i;一样的...不过p=i要类型转换下p=(int*)i;

多看看指针相关的内容吧...
yuyan_linger 2011-03-04
  • 打赏
  • 举报
回复

int *p=null;

int i=5;

*p=i; //出错 还没有指向某个地址 就取值了

p=&i; //对的 最常见的用法

*p=&i; //类型不一致

p=i; //类型不一致 出错
RichardWhuGis 2011-03-04
  • 打赏
  • 举报
回复

int *p=null;//p是一指针,地址为null

int i=5;//i是一整型变量

*p=i;//给地址为“p的值”的内存位置赋整型值i,此时p的值为null,有错

p=&i;//将“p的值”赋为i的地址,此时p的值为i的地址

*p=&i;//给地址为“p的值”的内存位置赋i的地址

p=i;//将“p的值”赋为i
赵4老师 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 liaoyibiao1987 的回复:]
现在从事.NET开发,突然觉得.net太白痴,就想学学以前读书时的C语言和数据结构。


回复11楼的兄弟,我其实以前也想从事C++或汇编的,早就认识了他的强大,但是无奈老师讲过一遍汇编,让我从清晰逐渐走向糊涂,然后走向深渊,最后放弃。。。现在汇编的书都给卖了··其余的C语言和C++还留着···哎·····
[/Quote]
不是学习用汇编编代码;而是学习每句C对应的汇编。这是两个不同的概念。
bigbaddy007 2011-03-04
  • 打赏
  • 举报
回复
#14楼

对了,我就想大概知道强制转换后的值,我知道有随机性,但是只要举个例子!!!
CiCi 2011-03-04
  • 打赏
  • 举报
回复
int *p=null;//定义整形指针p,给p赋初值为空;

int i=5;//定义整形变量i,赋初值为5;

*p=i;//VC6.0 让P所指向的值为i的值。编译通过,但是运行是出错;

p=&i;// 让指针P指向i的地址,此时*p的值是5,编译通过正常运行;

*p=&i;//VC6.0编译报错,不能给一个*p为整形,&i为类型为整形指针,不同类型不能赋值(强制类型转换可编译通过);

p=i;//VC6.0编译报错,P为整形指针,i为整形,不同类型不能赋值(强制类型转换可编译通过);

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧