各位大佬幫幫忙



uj5u.com熱心網友回復:
這些都是基礎知識一級指標 char *p = "two";p[0]是什么?p[1]是什么?*p和p[0]是什么關系?*(p+1)和p[1]是什么關系?
二級指標 char **pt = a; pt[0]是什么?和a[0]是什么關系?和*a是什么關系?pt[2]是什么?和a[2]是什么關系,和*(pt+2)是什么關系?
弄清楚這個問題,你就懂了。
uj5u.com熱心網友回復:
。。不懂。可否詳細說⊙_⊙
uj5u.com熱心網友回復:
我覺得你應該找本入門級的書看看你連一級指標的*p和二級指標的*pt有什么不一樣都不知道,真的不知道怎么給你說明了。
這么說吧,&是取地址運算子,*是解指標運算子,兩個互為反操作,你看看以下你能理解多少吧?
*(p+1)=*(p指向s[1]的首地址+1)=*(&s[1][0]+1)=*(&s[1][1])=s[1][1] //p是一級指標,p=&s[1][0],*p=s[1][0] //(解一重指標即可得到內容內容)
*(pt+2)=*(pt指向a的首地址+2)=*(&a[0]+2)=*(&a[2])=a[2] //pt是二級指標,pt=&a[0],*pt=a[0](解一重指標只得到一級指標,也就是還是個地址),**pt=a[0][0](解二重指標才得到記憶體內容)
uj5u.com熱心網友回復:
后面為啥a[0]+2又變成a[2]?不是a[0][2]呢⊙_⊙uj5u.com熱心網友回復:
后面為啥a[0]+2又變成a[2]?不是a[0][2]呢⊙_⊙uj5u.com熱心網友回復:
這就是一級指標和二級指標的區別
&a[0][2]是一級指標,&a[2]是二級指標,所以說你還是先找本入門級的數看看,你連指標,和指標的指標都分不清,沒法跟你解釋說明了
你自己列印
printf("%p, %p\n", (&a[0][0]+2), (&a[0]+2)); //看看有什么不同,雖然指標都是指向陣列的首地址,但是指標的型別不同,加減操作的結果也不同
uj5u.com熱心網友回復:
噢噢⊙_⊙好吧我列印看看
uj5u.com熱心網友回復:
p是指向的s的第二個字串地址,p再加一取*就求那個字串里第二個字符是什么,也就是w,后面s0的字串one,加一塊就是wone在陣列里一級指標確定列,二級指標確定行,pt+2就是第三行的首地址,列印就列印第三行內容
uj5u.com熱心網友回復:
你和我倆玩三國殺,但由于你太菜了,咱倆就商討了一下,決定我一回合摸2張,你一回摸4張。問:
你行動兩次你摸到了幾張牌?
然后又來了各老牛逼的人,它說沒意思,一回他只摸1張牌。
同樣他行動兩次摸到了幾張牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎視眈眈地盯著那一副牌堆【比如剩16張】。
但同樣想把牌堆給摸完,需要地次數是不一樣。對你而言,只夠4次摸得。對我而言夠8次。對他來說,能夠他摸16次
uj5u.com熱心網友回復:
你和我倆玩三國殺,但由于你太菜了,咱倆就商討了一下,決定我一回合摸2張,你一回摸4張。
問:
你行動兩次你摸到了幾張牌?
然后又來了各老牛逼的人,它說沒意思,一回他只摸1張牌。
同樣他行動兩次摸到了幾張牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎視眈眈地盯著那一副牌堆【比如剩16張】。
但同樣想把牌堆給摸完,需要地次數是不一樣。對你而言,只夠4次摸得。對我而言夠8次。對他來說,能夠他摸16次
嗯嗯




uj5u.com熱心網友回復:
請參考《C++陣列地址偏移》希望能夠幫到您!
uj5u.com熱心網友回復:
你和我倆玩三國殺,但由于你太菜了,咱倆就商討了一下,決定我一回合摸2張,你一回摸4張。
問:
你行動兩次你摸到了幾張牌?
然后又來了各老牛逼的人,它說沒意思,一回他只摸1張牌。
同樣他行動兩次摸到了幾張牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎視眈眈地盯著那一副牌堆【比如剩16張】。
但同樣想把牌堆給摸完,需要地次數是不一樣。對你而言,只夠4次摸得。對我而言夠8次。對他來說,能夠他摸16次
嗯嗯
這里有:
char 牌堆[16];
char* 他 = 牌堆;
int16* 我 = 牌堆;
int* 你 = 牌堆;
他+1 他摸一回牌。
你+3 你摸3回牌。
uj5u.com熱心網友回復:
你和我倆玩三國殺,但由于你太菜了,咱倆就商討了一下,決定我一回合摸2張,你一回摸4張。
問:
你行動兩次你摸到了幾張牌?
然后又來了各老牛逼的人,它說沒意思,一回他只摸1張牌。
同樣他行動兩次摸到了幾張牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎視眈眈地盯著那一副牌堆【比如剩16張】。
但同樣想把牌堆給摸完,需要地次數是不一樣。對你而言,只夠4次摸得。對我而言夠8次。對他來說,能夠他摸16次
嗯嗯
這里有:
char 牌堆[16];
char* 他 = 牌堆;
int16* 我 = 牌堆;
int* 你 = 牌堆;
他+1 他摸一回牌。
你+3 你摸3回牌。
哎算了


uj5u.com熱心網友回復:
你和我倆玩三國殺,但由于你太菜了,咱倆就商討了一下,決定我一回合摸2張,你一回摸4張。
問:
你行動兩次你摸到了幾張牌?
然后又來了各老牛逼的人,它說沒意思,一回他只摸1張牌。
同樣他行動兩次摸到了幾張牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎視眈眈地盯著那一副牌堆【比如剩16張】。
但同樣想把牌堆給摸完,需要地次數是不一樣。對你而言,只夠4次摸得。對我而言夠8次。對他來說,能夠他摸16次
嗯嗯
這里有:
char 牌堆[16];
char* 他 = 牌堆;
int16* 我 = 牌堆;
int* 你 = 牌堆;
他+1 他摸一回牌。
你+3 你摸3回牌。
哎算了



uj5u.com熱心網友回復:
你和我倆玩三國殺,但由于你太菜了,咱倆就商討了一下,決定我一回合摸2張,你一回摸4張。
問:
你行動兩次你摸到了幾張牌?
然后又來了各老牛逼的人,它說沒意思,一回他只摸1張牌。
同樣他行動兩次摸到了幾張牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎視眈眈地盯著那一副牌堆【比如剩16張】。
但同樣想把牌堆給摸完,需要地次數是不一樣。對你而言,只夠4次摸得。對我而言夠8次。對他來說,能夠他摸16次
嗯嗯
這里有:
char 牌堆[16];
char* 他 = 牌堆;
int16* 我 = 牌堆;
int* 你 = 牌堆;
他+1 他摸一回牌。
你+3 你摸3回牌。
哎算了


uj5u.com熱心網友回復:
A[B]
*(A+B)
*(B+A)
B[A]
//以上四行等價
"abc"[1]
*("abc"+1)
*(1+"abc")
1["abc"]
//以上四行等價
A[0]
*(A)
0[A]
//以上三行等價
uj5u.com熱心網友回復:
A[B]
*(A+B)
*(B+A)
B[A]
//以上四行等價
"abc"[1]
*("abc"+1)
*(1+"abc")
1["abc"]
//以上四行等價
A[0]
*(A)
0[A]
//以上三行等價
聽不懂


uj5u.com熱心網友回復:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);
/*char *s[] 是一個指標陣列,你也把它看作二維陣列,陣列每個成員都是一個指標(字串),用char *p=s[1],即指標p指向指標陣列的第2個成員的首地址,此時p指向第二個字串"two"
* 指標指向陣列的時候是指向陣列的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一個成員,即one,所以第一個輸出 w,one
*/
char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 這個題和上面一點點不同,pt是一個二級指標,二級指標和一級指標不同;一級指標保存的是一個字符的地址,比如上面的p保存的t的地址,而二級指標保存的是一個字串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /
uj5u.com熱心網友回復:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);
/*char *s[] 是一個指標陣列,你也把它看作二維陣列,陣列每個成員都是一個指標(字串),用char *p=s[1],即指標p指向指標陣列的第2個成員的首地址,此時p指向第二個字串"two"
* 指標指向陣列的時候是指向陣列的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一個成員,即one,所以第一個輸出 w,one
*/
char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 這個題和上面一點點不同,pt是一個二級指標,二級指標和一級指標不同;一級指標保存的是一個字符的地址,比如上面的p保存的t的地址,而二級指標保存的是一個字串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /講的好明白謝謝

uj5u.com熱心網友回復:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);
/*char *s[] 是一個指標陣列,你也把它看作二維陣列,陣列每個成員都是一個指標(字串),用char *p=s[1],即指標p指向指標陣列的第2個成員的首地址,此時p指向第二個字串"two"
* 指標指向陣列的時候是指向陣列的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一個成員,即one,所以第一個輸出 w,one
*/
char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 這個題和上面一點點不同,pt是一個二級指標,二級指標和一級指標不同;一級指標保存的是一個字符的地址,比如上面的p保存的t的地址,而二級指標保存的是一個字串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /講的好明白謝謝

uj5u.com熱心網友回復:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);
/*char *s[] 是一個指標陣列,你也把它看作二維陣列,陣列每個成員都是一個指標(字串),用char *p=s[1],即指標p指向指標陣列的第2個成員的首地址,此時p指向第二個字串"two"
* 指標指向陣列的時候是指向陣列的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一個成員,即one,所以第一個輸出 w,one
*/
char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 這個題和上面一點點不同,pt是一個二級指標,二級指標和一級指標不同;一級指標保存的是一個字符的地址,比如上面的p保存的t的地址,而二級指標保存的是一個字串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /講的好明白謝謝


uj5u.com熱心網友回復:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);
/*char *s[] 是一個指標陣列,你也把它看作二維陣列,陣列每個成員都是一個指標(字串),用char *p=s[1],即指標p指向指標陣列的第2個成員的首地址,此時p指向第二個字串"two"
* 指標指向陣列的時候是指向陣列的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一個成員,即one,所以第一個輸出 w,one
*/
char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 這個題和上面一點點不同,pt是一個二級指標,二級指標和一級指標不同;一級指標保存的是一個字符的地址,比如上面的p保存的t的地址,而二級指標保存的是一個字串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /
講的好明白謝謝
OK 有啥不明白的可以再問
uj5u.com熱心網友回復:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);
/*char *s[] 是一個指標陣列,你也把它看作二維陣列,陣列每個成員都是一個指標(字串),用char *p=s[1],即指標p指向指標陣列的第2個成員的首地址,此時p指向第二個字串"two"
* 指標指向陣列的時候是指向陣列的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一個成員,即one,所以第一個輸出 w,one
*/
char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 這個題和上面一點點不同,pt是一個二級指標,二級指標和一級指標不同;一級指標保存的是一個字符的地址,比如上面的p保存的t的地址,而二級指標保存的是一個字串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /
講的好明白謝謝
OK 有啥不明白的可以再問
嗯好滴


uj5u.com熱心網友回復:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);
/*char *s[] 是一個指標陣列,你也把它看作二維陣列,陣列每個成員都是一個指標(字串),用char *p=s[1],即指標p指向指標陣列的第2個成員的首地址,此時p指向第二個字串"two"
* 指標指向陣列的時候是指向陣列的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一個成員,即one,所以第一個輸出 w,one
*/
char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 這個題和上面一點點不同,pt是一個二級指標,二級指標和一級指標不同;一級指標保存的是一個字符的地址,比如上面的p保存的t的地址,而二級指標保存的是一個字串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /
講的好明白謝謝
OK 有啥不明白的可以再問
嗯好嘞


uj5u.com熱心網友回復:
好滴好滴

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/34204.html
標籤:新手樂園
上一篇:fork( )創建兩個子行程,父行程顯示字符A,子行程分別顯示字符 B和字符C。為什么A和C之間被隔開了?
下一篇:為什么我qt顯示的圖示都很扁
