我正在努力理解指標的用處。我已經閱讀了類似問題的答案,但它們似乎并沒有讓我明白。
比方說,我們要動態地分配一些空間,使用一個變數,我們會做這樣的事:int *i = malloc(sizeof(int))。我不明白為什么 C 的創建者覺得需要一個指標來完成這項作業。為什么他們沒有 malloc 回傳 (void) 型別的記憶體(如果一般情況下不可能,請糾正我)而不是指向該記憶體的 (void*) 指標。其語法類似于int i = malloc(sizeof(int)).
我知道這個問題可能很抽象,因為我不具備解釋我大腦中所擁有內容所需的所有知識。如果我說的某些話沒有意義,請隨時告訴我,以便我詳細說明。先感謝您!
uj5u.com熱心網友回復:
malloc不知道記憶體分配用于什么。
以向量的記憶體分配為例。就像是
ptr = malloc(70 * sizeof(int));
例如,您可以在那里寫入一些整數,然后讀取與字串相同的向量。
指標的一個重要用途是通過間接進行高效編程。跑
#include <stdio.h>
int main()
{
int ref = 99;
int *a=&ref;
int *b=a;
printf("a:%d b:%d ref:%d\n", *a,*b,ref);
*a = 100;
printf("a:%d b:%d ref:%d\n", *a,*b,ref);
return 0;
}
看看會發生什么。在大型向量處理應用程式中,一次更改更多值會帶來性能提升。
uj5u.com熱心網友回復:
C 沒有其他方法來區分值型別(存盤在記憶體單元中)和參考型別(存盤對值的參考)。一旦您考慮結構或陣列,即您無法存盤到單個記憶體單元中的所有內容,它就會變得更加明顯。
int *p = malloc(n*sizeof(int));
上面的運算式不可能翻譯成你建議的語法的合理等價物;
int p = malloc(n*sizeof(int));
如果取消指標語法,則只有一種選擇:
p包含分配空間的記憶體地址(巧合的是也是整數值)。這意味著每個指標(或參考型別)變數的型別都將是int您要強制轉換的型別(并且仍然需要參考運算子)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366855.html
上一篇:有沒有辦法在不知道陣列大小的情況下將位于陣列末尾的指標帶到開頭?
下一篇:指向C 中二維陣列元素的指標
