[英]How the output is possible in the following?
'#include <stdio.h>
int main()
{
short arr[3][2]={3, 6, 9, 12, 15, 18};
printf("%d %d", *(arr + 1)[1], **(arr + 2));
}'
該程序的輸出是15,15?
根據運算符優先級規則*(a+i)[j]
將被解析為*((a + i)[j])
,最終等同於*( *(a + i + j) )
。 因此,對於i = 1
和j = 1
,它將是*( *(a + 1 + 1) ) = *( *( a + 2) + 0) = a[2][0]
在給定的圖像中,它具有3*2
矩陣,即3行和2 2行。
*(arr+1)[1]
可以這樣解釋:
arr+1
給出第二行第一元素的地址。
(arr+1)[1]
給出第三行第一元素的地址。
*(arr+1)[1]
給出存在於該地址的值
以下是示例:
void main(){
short arr[3][2]={3,6,9,12,15,18};
printf("%d %d %d %d", (arr ),(arr+1),(arr+1)[1],(arr +2));
}
輸出:
-977229152 -977229148 -977229144 -977229144
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.