| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2121 人关注过本帖
标题:指针变量是否能赋常量,指针变量不是只能存放地址吗?看书中例题有疑问想请 ...
只看楼主 加入收藏
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:12 
指针变量是否能赋常量,指针变量不是只能存放地址吗?看书中例题有疑问想请教各位达人前辈。。
//这是书上的例题(谭浩强指针例题9.6)。是说指针的。本人看了有疑问想各位前辈达人指教。。。
 main()
{
     int * p,i,a[10];   //* p是定义了一个指针变量
     p = a;  // a 是数组名代表数组首地址,并将 a 赋值给指针变量 p
     for(i = 0;i < 10; i++)
         scanf(" %d",p++);   // 输入数组各项的值。这都看懂了。问题是。p 是指针变量。指针变量不是真能存放地址吗。怎么可以赋 (%d)整型值呢?
     printf("\n");
     for(i = 0;i < 10; i++,p++)
         printf(" %d",* p);//  * p是指针变量 p 所指向的内存单元也能理解。就是上面的一下想不明白。请各位前辈达人指教!!!!
}
2015-10-30 10:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
早兩天不是你問的這個問題嗎?

授人以渔,不授人以鱼。
2015-10-30 10:58
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 2楼 TonyDeng
我问过函数返回值的问题。没问过指针赋值问题。请问两个有联系吗?请多多指教。
2015-10-30 11:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回答這個問題之前,你知道scanf()函數是怎麽工作的嗎?

授人以渔,不授人以鱼。
2015-10-30 11:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用朔源在2015-10-30 11:01:01的发言:

我问过函数返回值的问题。没问过指针赋值问题。请问两个有联系吗?请多多指教。

那你跟embed_xuel對答了什麽?

授人以渔,不授人以鱼。
2015-10-30 11:02
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 5楼 TonyDeng
关于scanf函数的使用并不清楚。对于embed_xuel的提问我也是知道什么说什么。关于scanf函数是由指针编写的这点。我也是回答了embed_xuel的提问后想到的。原先只知道scanf函数是有其他高手编写放库函数里,可以被我们使用。请你为我说一下scanf好吗?
2015-10-30 11:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf()函數從第二個參數開始,是指針,它指示函數内部的程序,把數據按第一個參數要求的格式轉換類型之後填寫到那個地址中的數據中。

程序代码:
int x;                 // 在内存中創建一個變量
int* p = &x;           // 創建一個指針變量,它儲存的値是x的地址
scanf("%d", &x);       // 把讀入的文本字符串轉換爲int型數據,填寫到第二個參數的地址上,不管那地址的變量名叫什麽,衹認地址
scanf("%d", p);        // 與上行完全等效,上下行合併,你會看到p = &x,正是第二行的内容


你認真看上面注釋中的每一句話、每一個字。尤其是裏面提到“字符串”,很多人以爲scanf()是直接讀指定類型的數據,其實不是,它是把字符串用算法轉換後再輸入對應變量的。比如你輸入123,scanf()讀到的是"123"字符串,它用你們平常練習用的那種算法,轉換爲整數123,再賦值給第二個參數指定地址的内存中。

明白了這個道理,關於scanf()所造成很多錯誤和問題,都能理解,並知道怎麽排查。

[此贴子已经被作者于2015-10-30 11:28编辑过]


授人以渔,不授人以鱼。
2015-10-30 11:21
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 5楼 TonyDeng
你的意思是 &a[i] 和 p++ 是相等是吗?
1.——>.& 是取地址符。取 a[0] 的地址,再用 scanf 函数赋值给啊 a[0] .i++, i == 1 .
2.——>.& 是取地址符。取 a[1] 的地址,再用 scanf 函数赋值给啊 a[1] .i++, i == 2 .
3.——>.& 是取地址符。取 a[2] 的地址,再用 scanf 函数赋值给啊 a[2] .i++, i == 3 .
.........
"p++" p 是指针变量,它直接指向地址。通过它的自加直接赋值。和上面的取地址,再赋值后,自加。是一样的。是这样的吗?
2015-10-30 11:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 8楼 朔源
在數組的情形下,p + i等價于x[i]

授人以渔,不授人以鱼。
2015-10-30 11:28
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 9楼 TonyDeng
十分感谢!
2015-10-30 11:29
快速回复:指针变量是否能赋常量,指针变量不是只能存放地址吗?看书中例题有疑问 ...
数据加载中...
 
   



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

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