C 指標和陣列,C 指標陣列

發布 科技 2024-07-24
7個回答
  1. 匿名使用者2024-01-31

    a) int *b[ ] 錯誤,指標必須指向受控的已知記憶體位址。

    b)int a[5], num[5]=;沒錯。

    c)int a[ ]int *num[5]=;錯了,和A一樣。

    False,num[1] 步長 4 表示整行位址,&a[1][3] 是每行第四列的位址,得到 a,即單個元素的位址。

  2. 匿名使用者2024-01-30

    int a[2][3];定義乙個二維函式,每個維度陣列有三個元素。

    int (*pt)[3];定義乙個陣列指標,即定義乙個指向三個元素的指標,即指標,每增加 1 個,位址跳過三個整數

    pt=a;這是將 pt 指向 a[0],請注意 a[0] 是乙個包含三個元素的陣列位址。

    對於選項 a,pt[0][0] 是正確的,pt[0][0] 等價於 a[0][0]。

    對於選項 b,這是不正確的,因為 pt+1 是 a[1],pt+1[2] 等價於 a[3][0] 是不正確的。

    因為運算子優先順序大於 *,*(pt+1)[2] 是 *pt[1+2],即 *a[1+2]。 *a[3] 等同於 a[3][0]。 越界了。

    將其更改為 (*(pt+1))[2],相當於 a[1][2]。

    對於選項 c,正確,*(pt[1]+2) 等價於 a[1][2]。

    對於選項 d,正確,*(a[0]+2) 等價於 a[0][2]。

  3. 匿名使用者2024-01-29

    b.*(pt+1)[2] 選項不正確。 pt 指向了 a,但 pt 屬於行指標(array pointer),每移動移動 3 個儲存單元,pt+1 相當於移動一次(即一行),方括號內有高優先順序,所以接下來的執行是 (pt+1)[2],意思是後移 2 行,使指標從一行移動到一列, 然後執行中的第乙個*值,相當於結果是a[3][0],所以下標會越界,所以是錯誤的。

  4. 匿名使用者2024-01-28

    首先,你要明白陣列名稱和指標本質上是一回事,它們都是位址,陣列的第乙個位址。 一旦你知道了這一點,你就可以學習並付諸實踐。 這就是C語言的精髓。

    假設您定義了 int

    p,a[10];並設 p=a; 這個操作叫做指向陣列a的指標p,其本質是給變數p支付乙個值,即陣列a的位址,a[0]的位址,以及儲存在a本身的內容。

    那麼引用a[i],你可以用很多方式寫出來,比如*(a+i),*p+i)、p[i],都是等價的。

    p++ 的意思不是 p=p+1,至少有時候不是,p++ 的運算其實是指向 p 指向下乙個元素,即 p 指向 a[0],所以現在 p 指向 a[1]。 由於 a 是乙個 int 型別並且代表 4 個位元組,因此操作 p++ 實際上將 p 的內容加 4。 不要問為什麼,這是C規定的。

    如果 p 指向 char 型別,則 p++ 將 p 的值增加 1。

  5. 匿名使用者2024-01-27

    (1) a[2][1] 是陣列中的值,即第 3 行中的第 4 行 = 9

    2)a[1]是指第二行開頭的位址,即2000+16=2016,其中16為4*4

    3)A與a[0]相同,即問題的2000

    4) A+1 和 (2) 相同,即 2016 年

    5) *a+1 是第 1 行的第二列,位址與 *a[0][0] 相同,即 2000+4=2004

    6) (A+1) 表示 A+1 的位址與 (2) 和 (4) 相同,即 2016

    8) (a+1)+1 根據 (6) 2016+4=2020 取後者的位址

    9) (a+2)+2) 這分為兩部分。(a+2)+2 輸出位址,然後在此基礎上指向,即 (a+2)+2) 就是我們要輸出 (a+2)+2 指向的值。a+2)+2 是陣列的第 3 行和第 3 列,即 21

    綜上所述,答案是:

    我最近也自學了c,也許有點不正確。

  6. 匿名使用者2024-01-26

    陣列指標的基本概念,指樓上的那個,難怪有bug,難怪不能提交。

  7. 匿名使用者2024-01-25

    2. a[1]為第二行的第乙個位址,為2000+4*4=2016;

    4. A+1 相當於 A[1],2016;

相關回答
13個回答2024-07-24

這個問題本身有問題。

結果沒有初始化,沒有指向任何空格就傳遞給add函式,這本身就是錯誤的,當然也可以實現,在add函式中申請乙個位址來儲存結果,並將位址發回給結果,但是該位址的**是無法控制的, 容易造成記憶體洩漏。 >>>More

5個回答2024-07-24

字串是儲存字串的字串指標變數"i love china!"。 >>>More

22個回答2024-07-24

陣列和指標之間的區別:

陣列名稱確實表示指向陣列第乙個位址的指標,但是這個指標很特殊,它的值(指標的值是指標指向的位址)不能被覆蓋,只能覆蓋它指向的內容,換句話說,陣列名稱只能指向陣列的第乙個位址, 如果有陣列 char a;那麼如果 a = a+1; 這是乙個甚至無法編譯的錯誤。 對於普通指標,例如,可能有乙個陣列 char a; 然後定義乙個字元 *p = a; 然後使用 p = p+1 是有效的,這意味著指標 p 指向 &a[1]。 >>>More

3個回答2024-07-24

#include ""void prt(int *x,int *y,int *z) main() 另乙個詞 z; (和 ++ 處於相同的操作級別,並且從右到左組合); *(z++) 是先輸出 40,然後加位址,不加元素,加上 *(z++) 這個格式是加位址; 因此,輸出後,z 的位址發生了變化,而不是原來的變化,如果再次呼叫,您仍然將 c 的值傳遞給 40,並輸出它,然後新增位址; a 和 b 的值發生變化; 你要記住第一句話,我把這句話括起來; *z++,就是拿元素加法,如果沒有*號就是位址加法,如果你把z設定成乙個陣列,然後,給他兩個元素,按照你上面的*(z++)他可以第二次輸出第二個元素,記住,只在陣列裡加位址,鍊表, 也就是說,必須有乙個字串;如果不是單個,則可以使用新增的位址,並且必須在同乙個字串中;

17個回答2024-07-24

p5[1] 取第二個字元的位址,即'b',列印結果為b,取p5[0]+1"def",列印結果為 def >>>More