| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1358 人关注过本帖
标题:请教高手一个常量指针的问题!
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
scanf()函數,no1作爲參數使用,此時參數是值傳遞,到達scanf()函數内部的指針,是複製no1的值,是另外一個指針,這個指針并不被聲明爲const。

授人以渔,不授人以鱼。
2014-05-28 16:04
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:0 
懂了!!!
2014-05-28 16:18
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
受教了。
2014-05-28 16:24
chrisgardner
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:73
专家分:114
注 册:2013-9-25
收藏
得分:0 
回复 10 楼 TonyDeng
也就是说,fun()这个函数在原型中就规定了它有两个形参no1,no2。它们都是 family 类型的结构指针,但是由于 const 的原因,这两个指针所指向的数据是不允许被修改的,所以出现 no1->age = 60; no2->age = 80; 的时候编译器一眼就看出了这两个语句在修改no1,no2指向的值,编译器就不会放行。

但是scanf()可以修改结构中的成员数据是因为,no1,no2中的地址被拷贝了一份,类似于镜像一样发送给了scanf(),这两个拷贝的地址和no1,no2指向了同样的结构成员,但是它们没有被规定为const,所以可以通过这两个拷贝的镜像在运行程序时修改它们指向的结构成员。

在书上看到过“按值传递机制”,当时不太懂,现在明白了。版主你说的这句话(注意,這僅僅是編譯器在編譯時的行爲,而不是程序運行時的行爲。)很有深意!是书本上没有的经验之谈,值得菜鸟好好揣摩。
再次感谢版主耐心的回答了被问烦了的scanf()问题!
2014-05-28 16:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf()/printf()這一對函數,經常給程序員帶來麻煩,不光是新手,老手也免不了,主要原因是它們使用了可變參數機制。可變參數的函數,編譯器取消了對參數的類型檢查,放到運行時靠數據滿足條件來碰運氣,像諸如明明希望輸入char(用%c格式符)卻給出了int形參的代碼,編譯器是檢查不出的(實際是放棄檢查),所以這一對函數給新手程序員帶來的挫折足以令他們喪失學習信心。

授人以渔,不授人以鱼。
2014-05-28 17:22
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
懂了,在scanf又传了一次,多谢版主


莫问前尘有愧,但求今生无悔
2014-05-28 18:17
chrisgardner
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:73
专家分:114
注 册:2013-9-25
收藏
得分:0 
回复 15 楼 TonyDeng
呵呵,所以问scnaf的人很多,楼主有没有介绍scanf的文章,如果有的话贴出来给新手学习学习,这会让我们少走很多弯路。
2014-05-29 09:15
anitaM
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-10-19
收藏
得分:0 
常量指针只是表明它的地址不能改变,该地址上的值可以改变。
2014-05-29 14:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 17 楼 chrisgardner
你嘗試自己寫一個簡化的scanf(),會理解很多東西。不難寫的,不需要考慮硬件和系統細節,衹要明白原理即可。

[ 本帖最后由 TonyDeng 于 2014-5-29 19:35 编辑 ]

授人以渔,不授人以鱼。
2014-05-29 18:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用anitaM在2014-5-29 14:55:56的发言:

常量指针只是表明它的地址不能改变,该地址上的值可以改变。

const有兩個修飾位置,在前面表示指針所指向的數據不可修改,在後才是你說的指針值不可修改。

[ 本帖最后由 TonyDeng 于 2014-5-29 19:36 编辑 ]

授人以渔,不授人以鱼。
2014-05-29 18:39
快速回复:请教高手一个常量指针的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036046 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved