c語言二級指標問題,C語言二級指標問題

時間 2021-08-14 06:07:21

1樓:匿名使用者

1、通過二級指標去訪問二維陣列需要先給二級指標分配等同於二維陣列行數的一維陣列指標,然後把二維陣列的每行首地址賦值給對應位置的一維指標上。之後就可以通過二維指標直接訪問了。

2、參考**如下,可以看具體註釋輔助理解。

#include //輸入輸出標頭檔案。

#include //本程式需要用到malloc/free函式,引用該標頭檔案。

int main()

; //定義二維陣列a,並賦值從1-12.

int ** p = null;//定義二維指標。

int i, j;

p = (int **)malloc(sizeof(int *) *3);//要訪問的陣列有三行,所以申請三個一維指標變數。

for(i = 0; i < 3; i ++)

for(i = 0; i < 3; i ++)

free(p);//釋放申請的記憶體。

return 0;

}用二維指標訪問二維陣列多用於函式呼叫。

對於一維陣列,如果函式引數為一維指標可以直接用陣列名當做函式引數。但是如果函式引數為二維指標,直接用二維陣列名做引數會出現訪問出錯,是因為二維指標和二維陣列的訪問方式不同造成的,需要如示例**中做轉換。

另外一種常用的方法是利用二維陣列的記憶體連續性將二維陣列轉為一維陣列處理,與本題無關,不做更多描述。

2樓:

在函式引數傳遞中只有值傳遞。

要看傳遞的值是什麼,如果是一個指標的值那麼它就是地址了。否則就是普通的值。

你這裡為什麼要用二級指標呢?你認為p的值已經是一個地址了所以直接傳它的值就可以搞定了。錯誤就在這裡。

你想想你為什麼還要為p開闢空間。如果p的值已經是你要的地址了那還需要開闢空間嗎。所以其實這裡要麼p的值是null要麼是一個隨即值,要麼是一個地址但不是你要的。

那麼你把這樣的值傳過去有什麼用呢。 所以這裡你要弄清楚我們真正要修改時是哪個的內容。是p所指向的那個記憶體嗎。

還是p本身,顯然這裡要該是p本身的內容。那麼你只把p的值傳給一個函式這個函式能修改p的內容嗎?顯然不能了。

所以我們得把p本身的地址傳過去。然後才能修改該地址的內容。所以就不得不用二級指標了。

3樓:

//給你看段**。

void myprintf(char *p)//然後在main中

int main()

/*這樣就是直接把p指向的地址傳給函式,函式並沒有 另開闢地址,只是傳了地址給呼叫的函式*/

c語言指標和二級指標問題 如果 int a[][3]={{1,2,3},{4,9},{7}}; int *p[3]={a[0],a[1],a[2]};

4樓:匿名使用者

從a的宣告來得知a是a[3][3]的二維陣列。自p是指標陣列,包含三個整形指標,分別質量二維陣列的三行**p相當於a[0][0]

*(*(p+i)+i 相當於a[i][i]*(*p+i)+3 相當於a[i][3]但由於陣列第二維的上限是3,所以其實是a[i+1][0]

p是二級指標,p+1移動的是一行,(*p)是一級指標,(*p)+1移動的是一個整形。**p是具體的元素了,不是指標了。

5樓:匿名使用者

語句不全,i沒有指明,把全程程式提供一下吧

二級C語言,下列程式的輸出結果,二級c語言題目 以下程式執行後的輸出結果是 main() int x 0210 printf X n ,x

九劍之上 main 語句2將 b和a分別傳給fun的兩個形參,b的地址傳遞給形參c,即c指向變數b,c c 1 即 c f 1,ascii碼值為g,故 c的值為g,注意,因為c變數的值是b的地址,c是對c的解引用,代表了b地址的內容,也即b變數的值,故b變數的值改變為g。fun函式第2句d 1即d ...

計算機二級c語言標準答案,計算機二級C語言程式設計題閱卷有標準答案嗎?是不是執行結果正確就可以拿全分啊?

清淦崔 1 第1題 m個人的成績存放在score陣列中,請編寫函式fun,它的功能是 將低於平均分的人作為函式值返回,將低於平均分的分數放在below所指定的函式中。答案 int fun int score,int m,int below return k 2 第2題 請編寫函式fun,它的功能是 ...

二級C語言關於指標與二維陣列謝謝

a p是一個指向char型別的指標,如果指向陣列,則陣列也應該是一維陣列才可,這裡s是二維陣列,不可 b k是一個陣列指標,它指向一個陣列,但是這個陣列要求有三個char型別的資料,跟p不匹配,不可 c s 0 表示s這個二維陣列的第一行,也就是,它屬於一維陣列,跟p匹配,可 d 將一個二維陣列賦值...