c語言指標基礎問題

時間 2022-08-31 10:55:12

1樓:匿名使用者

如果p是 int *型別,且執行了p=a;那麼p+1後指向陣列第二個元素,也就是你說的*p==2;

如果p指向的是a的地址,p+1後指向後4個位元組,由於a不是陣列,所以後面的記憶體儲存的是什麼是不確定的,也許是上一次某變數釋放後的殘留資料的一部分,也可能是系統初始化後的原始資料(0xcccccccc),也可能是其他資料,如果發生這種情況,我們說使用了不安全的訪問,這個對於c/c++程式設計師來說是必須注意避免的,因為一旦執行了非法訪問,很容易引起程式崩潰。

函式部分中的形參指標x,用來接收呼叫者傳遞進來的整數變數的地址或一維陣列地址(指標),該指標必須由呼叫者確定,函式體內不負責地址的準確性,函式內部假設x值是有效地址。

如果呼叫者傳遞了一個無效地址,和上面一樣會引起程式崩潰。

2樓:匿名使用者

答案依次為:對,對,是一個隨機值(也就是這段記憶體中是什麼值就輸出什麼值)

3樓:匿名使用者

1、 當 p = &a,並呼叫 p+1 進行操作:

首先 p 是 int 型別的指標,則會向下移動 4 個位元組,在 a 後面的資料可能是任何資料,print出來是記憶體中的資料;

2、p=x+m 意義:

當 x 指向陣列,則 p 是最後一個陣列的地址;如果 x 只是一個 int 變數的地址,則在執行 p=x+m 後,p 指向變數後面的地址。*p(p的指向的資料)是記憶體中的任意資料,但這樣訪問時不安全的,如果訪問到一些受保護的資料會出錯(如不可讀寫的記憶體資料)。

3、「是不是得事先知曉x必然指向陣列?」

指標所指向的資料必須是確定的,在記憶體中存在的資料,如:

int* p;

p = 1;

用這樣的方式為指標賦值是不允許的,因為地址1中資料是不確定的,或者不存在的。

樓上已經講得很清楚了。

C語言指標問題,C語言指標問題?

文庫精選 內容來自使用者 zzbo2022 讓你不再害怕指標 前言 複雜型別說明 要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解一個複雜型別,要理解複雜型別其實很簡單,一個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總...

C語言指標問題,C語言指標問題。

最大的寶寶 pointer是指標指向的一個值,此時為2,這個值再自加1自然為3。pointer此時還指向值2,減2的含義是指標回退兩個元素,自然指向了值6。指標本身有值,表示它指向的地址,這個值可以運算,表示對地址的修改。而指標指向的值,其實就是位於這個地址所存的值。在彙編以上層次的程式設計中,記憶...

c語言指標概念問題,C語言指標問題(初學者)

文庫精選 內容來自使用者 維旺 精選 沒有那麼複雜,從彙編或者計算機原理層面,反而更用不到型別,那裡只有地址和偏移。定義變數,無法是兩個要素,型別和變數名,型別讓編譯器知道可以做哪些運算和如何計算 變數名讓編譯器做成一個名字和地址的對應,以便把後面作用域內所有的p,都翻譯成這個地址。所以,沒有那麼糾...