a[2][3] = {{-3,14,5},{1,-10,8}}
*(a[j]+k)
*(a[j+k-2])
(*(a+j))[k])
(*(a+k-1))[j]
*((*(a+j))+k))
(**(a+j)+k)
*(&a[0][0]+j+k)
當我printf的這些我得到 輸出: -10 分別 請如果任何人能詳細解釋值是如何來的,我是一個新的起始人,請原諒我格式不好,因爲這麼多的工作也打擾你:)2三維Minkowski空間陣列解除引用,如何通過指針評估
a[2][3] = {{-3,14,5},{1,-10,8}}
*(a[j]+k)
*(a[j+k-2])
(*(a+j))[k])
(*(a+k-1))[j]
*((*(a+j))+k))
(**(a+j)+k)
*(&a[0][0]+j+k)
當我printf的這些我得到 輸出: -10 分別 請如果任何人能詳細解釋值是如何來的,我是一個新的起始人,請原諒我格式不好,因爲這麼多的工作也打擾你:)2三維Minkowski空間陣列解除引用,如何通過指針評估
我假設j == 1和k == 2:
*(a[j]+k) == *(a[1]+2) :
a[1] = {1, -10, 8};
So a[1]+2 is a pointer to 8, and *(a[1]+2) == 8
*(a[j+k-2]) == *(a[1+2-2]) == *(a[1]):
a[1] = {1, -10, 8}
Since *a[1] is the value of the first element in a[1], the expression evaluates to 1
(*(a+j))[k] == (*(a+1))[2]:
a+1 is a pointer to the second element in a, so *(a+1) == a[1] = {1, -10, 8}
a[1][2] == 8
(*(a+k-1))[j] == (*(a+2-1))[1] == (*(a+1))[1]:
*(a+1) == a[1] (see the last answer)
a[1][1] == -10
*((*(a+j))+k) == *((*(a+1))+2):
*(a+1) == a[1], so the expressions is equivalent to *(a[1]+2)
*(a[1]+2) is equivalent to a[1][2] for the same reasoning as above, which is 8
(**(a+j)+k) == (**(a+1)+2):
*(a+1) = a[1]
**(a+1) = a[1][0] == 1
Adding 2 to that gives 3
*(&a[0][0]+j+k) == *(&a[0][0]+1+2) == *(&a[0][0]+3):
&a[0][0] == a[0]
*(a[0]+3) == a[0][3];
這最後一個是返回1,因爲它是在存儲器延伸過去的端部的[0]到[1],和你'得到[1] [0]。我認爲這種行爲實際上是未定義的。它取決於C標準是否保證初始化的二維數組將在內存中順序分配,並可能導致分段錯誤或更糟。
有沒有更好的答案奇妙地解釋比你好,保持良好的工作:)) –
我完全可以看到你是一個專業的,但考慮到這一點,從你告訴我 int a [b] [c ]。一個[d]的 值並[e],使得d
^^^對不起,在評論中回覆我的聲望很低不能回答我自己的問題 –
我不明白你發佈了什麼。你能解釋你在問什麼嗎? – Gabe
我試圖更好地格式化您的代碼。我希望我保留了預期的意思。請讓我知道,如果我更換'____'是不正確的,或恢復編輯。 – Paulpro
這是一個詭計問題嗎? –