程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 指針 參數-多級指針的強轉輸出結果為什麼不通?

指針 參數-多級指針的強轉輸出結果為什麼不通?

編輯:編程綜合問答
多級指針的強轉輸出結果為什麼不通?

enter code here

## 1#include
2 void funb(int**x)
3 {
4 int**p=x;
5 **p=300;
6 }
7 void funa(int* x)
8 {
9 int*i=(int*)x;
10 *i=200;
11 funb(&i);
12 }
13 int main()
14 {
15 int i=100;
16 funa(&i);
17 printf("%d\n",i);
18 return 0;

19 }

#include
2 void funb(int**x)
3 {
4 int*p=(int*)x;// 為什麼強轉之後輸出的是200而不是300?
5 p=300;
6 }
7 void funa(int
x)
8 {
9 int*i=x;
10 *i=200;
11 funb(&i);
12 }
13 int main()
14 {
15 int i=100;
16 funa(&i);
17 printf("%d\n",i);
18 return 0;
19 }

最佳回答:


void funa(int x)這應該是你的偶然失誤,應該是 void funa(int *x)。

主要問題是:
void funb(int**x)
3 {
4 int*p=(int*)x;// 你在傳參的時候傳進來的是一個int型指針的地址,它的本質是指向int型數據的 指針的地址,即使強轉了類型,這個本質不會變,想要訪問到最初的int型數據還是要解兩次星號才行。但是因為你定的p是一位指針無法解兩次星號,所以無法直接解兩次星號改值,還要再強轉一次。即先把p轉成二維指針(int**)p,再解雙星**(int**)p 如下:
5 (int)p=300;
6 }
這樣才行。因為p的本質(也就是p對應的內存中存的數據)是最初int型數據的地址的地址。

使用指針時主要是理解變量內存中究竟存的是什麼,而不是去一味關注數據的類型。
個人意見,希望對你有幫助。如有錯誤還望指正。

u012813250
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved