就是下面這個圖片的程式,就是選中的那兩句。為什么用陣列就能輸出,用指標就不能輸出
uj5u.com熱心網友回復:
用指標你要先初始化指標,讓它指向一塊有效的記憶體比如
char *a = (char*)malloc(sizeof(char)*32);//a指向申請的記憶體
copy(a, str);
free(a); //如果是自己申請記憶體,用完之后要自己釋放記憶體
uj5u.com熱心網友回復:
不能是我那樣 char *a嗎uj5u.com熱心網友回復:
正確答案:如圖是用陣列可以輸出的,而用指標也是可以輸出的。不過題主的代碼有問題。問題所在:陣列char a[10],默認定義為具有10個元素的一維陣列。而指標的使用則必須指向一塊記憶體地址,因此需要有定義,你可以自己分配一塊新的地址,也可以指向已有量。因為變數就是記憶體空間里的值,而記憶體空間的名字就是地址。指標則指向地址。望采納~
uj5u.com熱心網友回復:
可以用malloc給char *a分配一塊記憶體,這樣就可以使用了uj5u.com熱心網友回復:
懂了。謝謝哥。我的那個原來是沒有給指標分配空間uj5u.com熱心網友回復:
很開心能幫到你,望盡快結貼~uj5u.com熱心網友回復:
字典不是有目錄嗎,查字典找某個字的具體讀音、釋義的時候,先得找到目錄那一條【那一行】,根據后邊的書頁,翻過去再能看對吧。那一行就如同指標。你建立了一個那樣的條目,但后面的書頁【對應指標指向的地址】是未知的,可能是任何地方。意圖通過該隨機的地址去訪問資料。這樣的行為自然不被許可。
uj5u.com熱心網友回復:
char *a;是野指標,即指向的位置是隨機的,a指向的記憶體區域不一定是可以寫的,因此如果指向不可寫,那么copy函式就是寫,就會出現例外,不如段錯誤。用陣列,那么定義的空間是在堆疊上,堆疊上的空間是可以讀寫的。
uj5u.com熱心網友回復:
你的*a是一個野指標,它沒有指向一塊具體的記憶體,你對它進行copy操作就是對他指向的記憶體操作,但是它的指向未知,有可能是一塊不允許訪問的記憶體,就會報段錯誤,可以使用malloc:char *a = malloc(16);然后就可以了。你定義一個陣列a[]的話系統會自動在堆疊里面給它分配一塊記憶體,是可以進行訪問的。
uj5u.com熱心網友回復:
char* str = "abcdefg";"abcdefg"是字面值常量,存盤在常量區某一塊,這里是把"abcdefg"在常量區的地址存到str指標中
char a[10];
宣告一個容量為10的陣列,a是個區域變數,會在堆疊區中為a分配一塊10位元組的記憶體
copy通過str中存盤的地址進入常量區記憶體把“abcdefg”拷貝到陣列的記憶體中
char* a;
宣告一個指標,指標所指記憶體用char格式讀取。指標a和str都有自己的記憶體,都用來備份地址,不能用來存盤字串。
a沒有初始化,所以a本身的記憶體存的是個垃圾值,也就是沒有明確指向的指標是野指標,讀寫野指標的“目標記憶體”會引發段錯誤!造成程式崩潰。
uj5u.com熱心網友回復:
覺得有幫助,又不結貼,你幾個意思uj5u.com熱心網友回復:
這個我不知道手機版的在哪里結貼
uj5u.com熱心網友回復:
謝謝哥,明白了
uj5u.com熱心網友回復:
謝謝啦!辛苦了,明白了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/20737.html
標籤:C語言
上一篇:如何計算檔案的hash值
