1樓:匿名使用者
看到很多人問,我也試著說說,當是自己的回顧也好。
首先,什麼是指標,其實它也就僅僅是語言的一種資料型別而已,就這點說跟int,char什麼的沒什麼區別,既然是一種資料型別,那就肯定有它的型別了,而就是這點導致很多人覺得指標很難。。。
1.指標的型別由他定義時指向的資料型別決定,即 int * pint 可簡稱 int指標, void *(*fun)(int ,int) 即一個特定函式的指標,只能指向 接受(int,int)引數,返回void *型別的指標,所以它的型別較多,hoho。
這也是為什麼會出現多級指標,如 int **p的原因。
這也是用好指標的關鍵,首先你要清楚了它是什麼型別的不是?
2.指標的內容: 儲存在指標裡的值指向儲存地址,*p 取出指標指向地址的儲存內容。
3.你說的指標的移動,所謂指標的移動,如*(p+n) 指標移動n個,究竟走了多遠?其實這完全有第一點,即他的型別決定,它指向的型別資料長度是多大(bytes),那移動一下就走多少儲存單元(bytes)。
例如。 char ch; char **p = ch;
為什麼要定義雙重的? 那是因為如果定義 char *p = ch,假設能通過編譯,那麼p++移動多少?按第一級陣列下標移動還是第二級?
who knows...編譯器當然不能讓你通過,因為它也不知到怎麼動這個指標了。
4.陣列作為引數傳遞的問題。其實對大多數編譯器來說(當然不能說全部。。。我也不知道幾種。。。),陣列作為引數,編譯器是生成指標的。也就是說
fun( char ch[10]) ... 其實傳遞的是 char **
5.本來想不到什麼了,看了你問的賦值問題,還是那句話,跟int ,double一樣,什麼樣的型別賦什麼樣的值...
總之。。。關鍵是弄明白它是什麼型別吧。
最後看一個,前兩天在網上看的:
這個定義不是噱頭,有他的用處的
void ( *signal ( int sig, void (*func) (int) ) ) (int);
看明白了它的型別,自然知道怎麼賦值了
2樓:
我有的,要不要我發給你啊
c++中關於指標的一些問題
3樓:七寸煙火
你理解的有問題哦親,這輸出的不是地址哦,animal是一個變數,他擁有一個基址,用cout << &animal << endl;輸出,你這輸出的是animal[1]之後的內容哦,也就是o之後的,另外樓下的回答輸出的也是animal的地址而已,因為他們屬於一個變數,另外地址是0x...(零x),二進位制是零x不是ox(歐x)哦
4樓:匿名使用者
因為c++標準庫中i/o類對《操作符過載,在遇到char指標時會將其當作字串來處理,所以會輸出"ox",如果想輸出地址,可以將其轉換成void指標或是使用printf。
cout << (void*)&animal[1] << endl;
printf("%p\n", &animal[1]);
c 指標陣列問題,C 中關於指標陣列的問題。
是錯誤的。char cchar count 宣告瞭cchar是有count個元素的陣列,每個元素都是指向char型變數的指標。但cin cchar i 卻試圖給cchar的第二個元素 指標 賦一個鍵盤值 這裡指標還沒有確定指向,是隨機的,它隨機地指向了不能寫入的地方,就要出錯。這裡應該先給指標陣列賦...
關於C語言指標問題,求大神,C語言指標的問題,求大神!!
第一個函式的兩個指標是區域性變數,函式完了就銷燬了,換不換都一樣,第二個是直接操作指標指向的地方 記憶體單元 也就是直接操作變數。不恰當的比方,好比停車,有個圖紙記錄了每個車位停的什麼車,第一個就相當於另外拿了個圖紙畫了一下想要的位置,原來的圖沒變,函式結束後來的圖被扔了,原來的圖保留著,實際的車並...
關於C中的timer控制元件,C 中,關於Timer控制元件的說法正確的是 選2項
會完成。但是需要注意 1.system.windows.forms.timer 是單執行緒的,它只在ui執行緒中執行,定時精度約55ms,當前的事件沒處理完成時,下一次事件不會觸發 過久地處理會導致介面假死。2.system.threading.timer 是多執行緒的,觸發的事件在threadpo...