簡單的就不說了,今天學鍊錶,在鍊錶中遇到了自己疑惑的事情,後來在網上查二級指標,搜出來乙個,才解除了自己的疑惑
好久沒有用過c/c++的二級指標了,總覺的它就是指標的指標,沒什麼大不了的,但是今天看到一道面試題,感覺自己對二級指標的理解還是不夠深刻。於是,從網上找資料,學習了一番……
題目是這樣的:
#include "問:程式能否達到目的:在getmemory()中為main函式中的開闢空間,並將str指向這段空間?stdafx.h
"#include
using
namespace
std;
void getmemory(char *p, int
num)
int main(int argc, _tchar*ar**)
分析:str是乙個指標,指向null,形參p也是乙個指標,初始也指向null,在getmemory函式中,這個指標又指向了新開闢的空間。但是只是形參的指向改變了,實參str仍然指向null,並沒有改變。因此,程式達不到題目的要求,而且執行時會出現錯誤,由於str一直指向null,執行strcop時,會出現錯誤,提示某某記憶體不能寫入。
正確的方法應該採用雙指標,程式如下:
#include "分析:str是乙個指標,指向null。而呼叫getmemory函式時,傳遞的是str的位址,p是乙個二級指標,*p是乙個指標。因此,將str的位址賦給臨時變數p,則*p就是指標str的值,改變*p的值就相當於改變str的值。因此這種方法能夠得到題目要求的效果。另外還有一種方法,採用一級指標,讓函式返回乙個指標變數,指向新分配的記憶體,程式如下:stdafx.h
"#include
using
namespace
std;
void getmeory(char **p, int
num)
int _tmain(int argc, _tchar*ar**)
#include "2. 另外用二級指標還經常用在動態申請二維陣列。stdafx.h
"#include
using
namespace
std;
char * getmeory2(char *p, int
num)
int _tmain(int argc, _tchar*ar**)
void這樣就實現了二維陣列的動態申請,因為一般陣列宣告時,不允許下標是變數,所以如果想動態決定陣列各維的大小,最好這樣做。main()
關於那個面試題,,,我也掛了,看後才有所警覺
下面看我的關於鍊錶的
struct我列印了一下mystruct
;typedef
struct
mystruct st;
void add(st **p, int inum, float icore)//
傳入頭結點位址,插入資料
else
//鍊錶不為空
//退出迴圈說明找到了最後乙個節點pp
st *last ;//
建立結構體指標
last = (st *)malloc(sizeof(st));//
分配空間
pp->pnext =last;
last->corse =icore;
last->num =inum;
last->pnext =null;
}}void
main()
add(&pfast, 1, 1);//傳入頭結點位址,插入資料我一直在懷疑經過這一句pfast的指向當然是fast
add(&pfast, 2, 2);//傳入頭結點位址,插入資料經過這一句pfast的指向應該是last
所以我懷疑
printf("%d,%f\n",pfast->pnext->num,pfast->pnext->corse);這一句應該會報錯
因為
我感覺如果pfast的指向永遠指向最後乙個鍊錶那麼
pfast->pnext->num就不存在
可是我一列印,,,
pfast確實指向了第乙個鍊錶
可是接著
add(&pfast, 2, 2);//傳入頭結點位址,插入資料只是把第乙個鍊錶的位址賦值給了pp,,但是並沒有改變*p的指向
下面的pp->pnext = last;只是給pp賦了新值
就如同
#include"指標使用的疑惑
test1.c include include include include char b abcdefg void change char char str int main int argc,char argv gcc test1.c o test1 執行結果 str abcdefg a nu...
指標與陣列的疑惑
include void reverse string char string void swap char a,char b intmain void void reverse string char string 若char string fucnkjljlk 換成 char string fu...
JSP 疑惑解決筆記
1 jsp兩種include的區別 include file 是把引入的檔案和當前的檔案合成乙個servlet檔案進行解析。是把當前檔案和引入檔案生成兩個不同的servlet檔案,在當前檔案中在進行動態的呼叫引入的servlet檔案。2 和重定向區別 是伺服器行為,瀏覽器只做了一次訪問請求,傳輸的資...