給定下列宣告
int array[4][5][3];
給定下列宣告 把下列各個指標表示式轉化為下標表示式。
指標表示式
下標表示式
*array
*(array+2)
*(array+1)+4
*(*(array+1)+4)
*(*(*(array+3)+1)+3)
*(*(*array+1)+2)
*(**array+2)
**(*array+1)
***array
array是乙個三維陣列指標,其定義如下:
int (* p) [4][5][3]就是表示陣列第乙個元素的間接訪問,array的位址是&array[0]。所以這裡下標表示式就是array[0]
array+2是乙個二維陣列指標,其定義如下:
int (*p) [5][3]array的位址+2表示指向了第2維空間的第三行,也就是&array + 5*3 *2 * 4 = &array + 120, 起始就是也就是&array[2],所以下標表示式就是array[2]。
array+1表示指向二維陣列的指標,再間接訪問就是array[1],再加4表示乙個指向一維陣列的指標,指向下一維第5行,位址就是array[1] + 3*4*4 = array[1] + 48, 也就是array[1] + 4,其定義如下:
int (*p)[3],但需要注意和上面的區別。
*(*(*(array+3)+1)+3)
*(*(array+3)+1)和上面的類似,也是乙個一維陣列指標,指向一維陣列,再加3就是在一維陣列裡面向後移動3個單元,所以 *(*(array+3)+1)+3 指向第3維的第4個元素,也就是指向array[3][1][3],由於前面又間接訪問符,所以最終就是array[3][1][3]。
這個表示式和上面幾個表示式了略有不同,array就是乙個3維陣列指標,對array使用了間接訪問符,*array,就是取出了三維陣列中的第1行,也就是乙個二維陣列[5][3]。
*array 加1表示這個2維陣列第2行,*(*array+1)表示第三維,+2表示指向第三行array[0][1][2], 因為前面有乙個間接取值符,所以最終下標表示式array[0][1][2]。
同上面類似,*array是乙個二維陣列,指向array[0],**array就是這個二維陣列再取下一維,就是array[0][0] , +2表示第三維第3行,就是指向array[0][0][2],因為前面有乙個間接取值符,就是array[0][0][2]。
**(*array+1)
*array是陣列array[0],即乙個二維陣列, +1表示第2行,就是array[0][1],再用間接訪問符訪問,就是array[0][1][0],因為前面還有乙個間接取值符,所以就是下標表示式array[0][1][0]
同前面一樣,每乙個間接訪問符,相當於提取一維,所以這裡就是array[0][0][0]
小結:這個多維陣列的指標表示式和下標表示式的轉換可以很好的幫我們理解陣列的儲存結構,和陣列指標的運算。
多維查詢表示式
mdx 的全稱是 mutil dimensional expressions 是由 microsoft hyperion 等公司研究多維查詢表示式,是所有 olap 高階分析所採用的核心查詢語言。mdx 可以用來進行以下操作 1.calculated members 計算成員 2.calculate...
Mdx多維表示式
一 命名成員 1 計算成員 度量維度 不可以使度量維度的子成員 with member measures total as measures 缺貨庫存 measures 不動銷庫存 select on columns,non empty on rows from repertory examinat...
PHP學習筆記6 表示式 多維陣列
在特定的語言中表達乙個特定的操作或動作的語句。表達是包含 運算元 和 操作符 運算元可以是變數,也可以是常量。操作符則提現了要表達的各種行為,如邏輯判斷 賦值 運算等。例如 a 1就是表示式 而 a 1 就是語句。另外表示式有值,例如 a 1表示式的值是1。php 中使用 來區分表示式 就是乙個表示...