Re: [問題] Pointer?

看板C_and_CPP作者 (Absolution)時間14年前 (2010/06/11 14:26), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《CSLabor (電腦工人)》之銘言: : 小弟剛剛做了一個Pointer實驗 : 發現一個百思不解的事實 : 有請各位強者幫不才小弟我解答一下 : void main(){ : char* pc; : pc="abcd"; : printf("pc=%s\n",pc); : system("pause"); : } : 執行結果pc=abcd : Q1:char指標變數不指定記憶體位置可以用? : 還是說只能在這種狀況才可以這樣用? 指標變數若是用來指向一個已經存在的實體 那麼他不需要做malloc(實體並沒有被複製,何須再向系統要記憶體?) 例如pc="abcd" 這條指令是兩個步驟 首先,系統先在記憶體中存入"abcd"這個字串實體於某個位址(假設是0x100) 然後再把0x100 assign給pc 記憶體中只有一個"abcd"實體 : Q2:對於pc="abcd"不解? : 這樣做是將"abcd"的記憶體位置指定給pc的位置嗎? 沒錯 : 那如果A字串複製到B字串為何要使用strcpy呢? : strcpy(char* B,char* A); : 而不能用B=A? B=A的意義就是把A的內容assign給B 假設A的內容是0x100 那麼B被assign後也變成0x100 A和B變成是指向同一個實體的指標 此時記憶體中還是只有一個實體 但若是用strcpy(B,A) 則是將A指向的實體複製一份到B指向的位址(假設是0x100) 因此記憶體中就有兩個相同實體了 一個存放在指標A指向的位址 另一個存放在指標B指向的位址(0x100) 有個重點是指標B是透過malloc向系統取得0x100這個位址的 所以在strcpy(B,A)之前 您必須先做malloc for B : Q3:小弟我指標很弱 : 不知道有沒有推薦的網頁或是電子書給小弟? : 其他有用的material也可 : 一般C語言入門書籍講的大同小異 : 不外乎就是取變數記憶體位置而已 : 小弟很想把指標用到出神入化的境界 : 卻不得其門而入? : 煩請各位強者幫小弟我指點迷津吧 : 在這邊先謝謝各位強者幫忙 : 小弟感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.66.19.129

06/11 16:17, , 1F
請問pc的內容就是存0x100嗎?那為什麼printf("pc=%s\n",pc)
06/11 16:17, 1F

06/11 16:19, , 2F
不是印出0x100呢? 而不是用printf("pc=%s\n", *pc);??
06/11 16:19, 2F

06/11 21:42, , 3F
如果你用%x就會印出address, %s是特殊用法,會印出字串
06/11 21:42, 3F

06/11 21:51, , 4F
若要用%s列印還有一個條件,那就是pc指向的實體最後一個
06/11 21:51, 4F

06/11 21:53, , 5F
元素必須是'\0'
06/11 21:53, 5F
文章代碼(AID): #1C4TSVjH (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
4
14
完整討論串 (本文為第 2 之 2 篇):
問題
4
14
文章代碼(AID): #1C4TSVjH (C_and_CPP)