#include<stdio.h>
void fun(int* a)
{
a = (int*)3;
}
int main()
{
int* val = (int*)1;
fun(val);
printf("val = %p\n", val);
return 0;
}
這個程式的輸出結果為什么是val = 0000000000000001
??
uj5u.com熱心網友回復:
%p 就是按32位或64位,16進制輸出。你在程式里修改指標的地址,出了函式依然是原來的地址uj5u.com熱心網友回復:
因為val是將(int *)1傳給了fun函式里的a(區域變數),這兩個變數是相互獨立的,除了傳值,沒有其他關系;所以fun函式不會把(int *)3帶出來;
所以val還是main函式里初始化的(int *)1;結果自然是這個了。
可以試試這樣
void fun(int** a) {
*a = (int *)3;
}呼叫
fun(&val);
再輸出來的結果應該就不是這個了。
uj5u.com熱心網友回復:
BTW:這里的指標變數們其實起到的仍然是非指標普通變數的作用。因為它們沒有被解參考。
所以樓主還需要額外注意一下,為了避免總線錯誤,指標變數實際上是不能隨意賦值的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269351.html
標籤:C語言
上一篇:這樣為啥不行?
下一篇:問個題
