陣列的輸出

2022-09-05 08:12:15 字數 1327 閱讀 8925

題目是:

int a[2][2][3]= ,},,}};

int *ptr=(int *)(&a+1);

printf(「%d %d」, *(int*)(a+1), *(ptr-1));

輸出結果為: 7 12

解析 先看兩個公式&a+i=a+i*sizeof(a); a+i=a+i*sizeof(a[0]);

int *ptr=(int*)(&a+1);首先是指向陣列a的最後乙個元素的下一位,接著是用(int*)進行型別轉換,把三維陣列轉換為一維陣列,這是後ptr指標指向的就是乙個一維陣列

那麼在接下來輸出*(ptr-1)的時候指標往前移動乙個元素,

*(int*)(a+1); (a+1)相等於a+sizeof(a[0])=a+6,此時a+6指向的是元素7,接著是(int*)把(a+1)從三維陣列轉換為一維陣列,最後是位址解析輸出結果,如果不用(int*)也可以直接用***即*(int*)(a+1)等價於***(a+1)

在上面題的基礎上增加兩條輸出語句:

cout<<**(*a+1)《輸出:4 1

int a[2][2][3] = , },, } };

cout << ***a << endl;//輸出1

cout << *(**a + 1) << endl;//輸出2

cout << *(**a + 2) << endl;//輸出3

cout << *(*(*a + 1)) << endl;//輸出4

cout << *(*(*a + 1)+1) << endl;//輸出5

cout << *(*(*a + 1) + 2) << endl;//輸出6

cout << *(*(*a + 1) + 3) << endl;//此時是會輸出7的,原因同上面講的一樣,此時也是指標每次只移動四個位元組的位址大小...

cout << *(*(*(a + 1))) << endl;//輸出7

cout << *(*(*(a + 1)) + 1) << endl; //輸出8

cout << *(*(*(a + 1)) + 2) << endl;//輸出9

cout << *(*(*(a + 1)) + 3) << endl;//輸出10道理同上

cout << *(*(*(a + 1) + 1)) << endl;//輸出10

cout << *(*(*(a + 1) + 1) + 1) << endl;//輸出11

cout << *(*(*(a + 1) + 1) + 2) << endl;//輸出12

cout << *(*(*(a + 1) + 1) + 3) << endl;//越界輸出垃圾值

陣列的輸出

平時用的都是echo這個函式輸出,然而對於陣列,它無法輸出陣列的詳細內容,只能個輸出特定下標的陣列元素 如 a 0 那麼我們就要換種方法來輸出陣列變數。1.print r var dump 這兩個函式都可以用來輸出陣列的詳細資訊。2.each 返回陣列中當前的鍵 值對並將陣列指標向前移動一步 用法舉...

陣列的遍歷輸出

public class text for int i 0 isystem.out.print charr i 傳統的遍歷輸出方式 system.out.println for char i charr 整體每乙個都遍歷,用此比較簡便 int arr for int i arr 二維陣列的遍歷輸出 ...

php 輸出陣列內容 php陣列怎麼輸出

php陣列的輸出方式有兩種 print r 函式和var dump 函式。1 print r 利用 print r 函式可以列印輸出整個陣列內容及結構,按照一定格式顯示鍵和元素。注意 print r 函式不僅是只用於列印,實際它是用於列印關於變數的易於理解的資訊。語法 bool print r mi...