指針之間也不能隨意賦值。
看個比較典型的C語言筆試題。
有三個定義,問以下賦值語句哪幾個不正確?
大家也不妨把視頻暫停思考一下,把答案留在評論區。
s 是個二維數組,三行十列;
k 是個指針,指向有三個元素的數組;
p 就是個簡單的 char 類型指針。
第一個 p = s。
s 是二維數組的數組名,表示二維數組首行的地址,如果讓 s 加一,會加 10 個字節;
而指針 p 只是個字符指針,p+1 只加了一個字節。
這兩個含義不一樣,不能賦值。 第二個 p = k。
k 指向的是數組,p 指向的是字符,同樣也是對不上,不能賦值。
第三個 p = s[0]。
s[0] 表示數組首行首元素地址,既然是元素的地址,s[0] 加一,就是加 1 個字節。
p也是元素的地址,這兩個含義一樣,可以賦值。
第四個 k = s。
s 是二維數組首行的地址,首行有 10 個元素。
k 雖然也指向一維數組,但是只有三個元素,10 個元素和 3 個元素也對不上,不能賦值。
所以答案就是,除了第三個,其他的都不能賦值。
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
原文標題:指針之間不要隨意賦值
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
相關推薦
地址指針是32位的,int *才16為,賦值會出現截斷比如int *souraddr;souraddr =(int *)0x40000;出現這個警告:conversion from integer to smaller pointer查看結果:souraddr=0求大神指
發表于 01-31 17:11
要發送出去數據就是給SBUF賦值,可是賦值之后接收到的和賦給SBUF的值不一樣呢?接收到的數據為什么不是5呢?? 用LabVIEW讀取的也是這樣 85 85 85。不知道是哪里出錯了,
發表于 08-14 22:46
,是多少呢,結果是11,因為我們使用*p賦值,就相當于a=11,賦值效果一樣的。3:指針的指針,是面對于
發表于 09-19 00:12
:unsigned char *gets;將數組的值賦給指針用strcpy函數。strcpy((unsigned char *)gets,(const unsigned char *)dd);這樣寫對不對。我通過測試,dd的值并沒有賦值給
發表于 04-03 00:31
,比如讀、寫、調用函數等。 2、永遠不要使用“野”指針 前面說了,指針的內容是 地址,是內存地址,一旦你擁有了一個指針,你也就有了權力去通過這個指
發表于 08-20 08:30
嗨,盡管閱讀了幾個互聯網和論壇的問題/答案,我還是不明白為什么下面的代碼會產生“來自不兼容指針類型的賦值”。為什么這個警告的代碼運行正常?嫦娥發出同樣的警告。問候語,CJ。
發表于 04-26 12:47
是一個指針,指針指向一個地址,我們不能把值10賦給一個地址。因此我們如果要賦值只能這樣做:b=&a。把a取地址就可以賦值給指針了。同時,在
發表于 12-18 14:10
給C語言指針賦值有何作用?給普通變量的賦值與給指針變量的賦值有何不同?
發表于 02-25 06:10
往往,我們一提到指針函數和函數指針的時候,就有很多人弄不懂。下面就由小編詳細為大家介紹C語言中函數指針,指針函數和函數指針
發表于 11-16 15:18
?3627次閱讀
當使用關鍵字void聲明指針變量時,它將成為通用指針變量。任何數據類型(char,int,float等)的任何變量的地址都可以賦值給void指針變量。
發表于 05-06 09:49
?1358次閱讀
51單片機-指針1. 指針變量a的指針=變量a的地址再定義一個變量p,來存放a的地址(指針),p就是指針變量,簡稱
發表于 11-12 09:51
?33次下載
C語言指針的理解使用指針變量的聲明給普通變量的賦值對比給指針變量的賦值代*的指針的使用說明
發表于 01-13 13:42
?3次下載
如果說指針在一些人心中是導致代碼“極其不穩定的奇技淫巧”,那么“函數指針”則是導致代碼跑飛和艱澀難懂的罪魁禍首。然而,函數指針的定...
發表于 01-26 19:51
?2次下載
”=“阻塞賦值與”
發表于 09-12 09:06
?1044次閱讀
數組之間的賦值能不能直接使用等于號?比如這樣的代碼。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
發表于 11-26 11:23
?143次閱讀
評論