c語言指標變數問題

時間 2021-08-31 06:06:47

1樓:金色潛鳥

c 語言中,形式邏輯不成立,指標書寫的外形,在宣告中和在語句中,外貌相同,意思不同!

int *ptr; 這是宣告,宣告 ptr 是指標,用於指向 int 型變數。

語句中 *ptr 表示 指標指向的數值, ptr 表示 指標指向的地址。有*的是值,沒星號的是地址。

ptr=(int *)malloc(num * sizeof(int)); 這是動態分配,分配了num個int型數值的存放空間,ptr 表示 指標指向的地址(分配了的空間的「始地址」)

你也可以理解成,定態宣告瞭陣列: int ptr[num]; 陣列名ptr, 有 num個元素。

scanf("%d",&ptr[i]); ptr[i] 是陣列第i號元素的值。&ptr[i] 是陣列第i號元素的地址。

printf("%d",ptr[i]); 輸出 ptr陣列第i號元素的值.

---深入理解:

語句裡,ptr[i] 裡的 實質上是運算子,ptr[i] 等價於 *(ptr+i)。是值。

語句裡,&ptr[i] 等價於 (ptr+i) ,是地址。等於: ptr的地址+i * sizeof(int)。

2樓:昝成秋梵

ptr申請了num個int型記憶體區域後,int *ptr就等價於int ptr[num]。

scanf("%d",&ptr[i])的意思是獲取你輸入的整數,賦值給ptr[i]。

printf("%d",ptr[i])輸出的並不是ptr指標,而是ptr[i]的值,因為陣列可以用下標取值。

ptr是指標變數,但是ptr[i]不是指標變數,ptr[i]可以理解為一個int型變數。

使用scanf存入時,&並不是加在ptr上,而是加在ptr[i]上,取的是ptr[i]的地址。[ ]的運算優先順序高於取地址符&。

3樓:匿名使用者

1、給指標變數賦初值在語法上是沒有錯誤的,編譯執行也可以通過,但是一旦**量增多後,很容易造成指標的錯用,為了防止這一問題最好將指標變數定義的時候就置成null,這樣做是為了**安全著想。 2、指標定義後就會隨機指向一個位置的,編譯的時候也不會提示錯誤,程式短很容易找出來,長了多了就難找了,所以這是一個好習慣吧。

4樓:聽不清啊

scanf("%d",&ptr[i])是從鍵盤讀入一個十進位制整數,並存入到陣列元素ptr[i]中。

int *ptr=null;

ptr=(int *)malloc(num * sizeof(int));

是根據輸入的num的大小動態申請陣列的方法。ptr是一個指標(同時也是ptr陣列的陣列名)

相當於靜態申請陣列

int ptr[num];

的作用,只是這兩都分別從系統的位置不同區域申請記憶體(初學者可暫時忽略這一點,使用上是完全一樣的)。

ptr[i]就是這個陣列中的一個成員,加上取地址符&,就是告訴c系統,讀取到的資料要存放的位置,

scanf("%d",&ptr[i]);完全等同於scanf("%d",ptr+i);---------scanf函式的使用格式如此,必需要使用資料存放地址的。

5樓:匿名使用者

int *ptr是指標,malloc了num個int後,ptr指向這段連續的記憶體,ptr其實就是num個int的陣列的頭指標,也可以將ptr認為元素是int的陣列。符號你可以認為是取值操作,那麼ptr[0]或者*(ptr)就是第一個元素,ptr[1]或者*(ptr+1)就是第二個元素...

scanf("%d",&ptr[i])就是依次對這個陣列(連續的記憶體)賦值。

scanf的函式定義,這裡是個地址,也就是指標,&是取地址操作,也可以寫成scanf("%d", ptr+i);

printf("%d",ptr[i])是輸出第i個元素(連續記憶體的第i個值)

6樓:匿名使用者

ptr是指標,但輸出的是ptr[i],指標名+下標可以相當於陣列名+下標,ptr[i]相當於*(ptr+i),指標解引用了,所以輸出的指標移動i位所指的值。scanf引數是變數的地址,ptr[i]的地址就是&ptr[i]。總之一句話scanf傳變數地址,printf傳變數值。

7樓:匿名使用者

scanf需要一個地址引數,表示往指定地址輸入,所以在陣列元素前加取地址運算子。

指標變數儲存了指向變數的地址,所以可以按整型元素輸出地址值。

8樓:童之新

這是指標與陣列可以互換的關係了,比如int buf[10]; int *ptr = buf; 所以*ptr = buf[0]; *(ptr+1) = buf[1];也可以表示ptr[0] = buf[0]; ptr[1] = buf[1];所以說在scanf函式裡,傳入的是一個地址,而ptr[i]明顯是這個地址的值,所以要加個取地址符&。

關於C語言指標問題,C語言指標的賦值問題

飛翔的蠍子大叔 關於int p1 123這個問題我看了很多資料,在這裡我發表一點看法,該問題非常好,這是c語言需要規範的地方。int p1 123 是非法操作,指標表示地址,地址 123?我是沒有見過這種操作。地址一般用二進位制 八進位制 十六進位制表示,123表示地址根本就是扯淡!這個語句的目的就...

關於C語言指標變數ppp的區,關於C語言指標變數 p p p 的區別

森祿欽春桃 首先搞明白一點,printf語句中表示式的執行順序是從右向左的,並且對於 q 首先進行解引用操作,再自增,即 q,q q 1 所以說第一個printf的輸出為22對於第二個printf,首先執行 q 再執行 p 對於 q 可以轉化為先執行 q 即輸出它的值,再執行 q q 1,最後輸出 ...

C語言中連結串列中的結構體指標變數問題求教

定義結構體指標變數時,只分配儲存指標型別需要的空間,比如listnode p 這裡p有給他分配儲存指標的4個位元組的空間。實際上你是要讓p指向一個結構體空間的,這個結構體空間在哪?可以先定義listnode a 然後 p a 這時p指向一個之前申請分配過空間 編譯器設定過其地址和大小,在棧空間存放著...