while(i < a_rows * a_cols) {
out[i] = *(a_mat + i); // this line
i++;
}
標記行是做什麼的?out [i] = *(a_mat + i)在C中做什麼?
while(i < a_rows * a_cols) {
out[i] = *(a_mat + i); // this line
i++;
}
標記行是做什麼的?out [i] = *(a_mat + i)在C中做什麼?
它得到a_mat + i
指向的值。它本來可以寫成a_mat[i]
。
在C中,x[i]
與*(x + i)
的表達式相同,因爲向指針添加整數是通過將整數縮放爲指向對象的大小來完成的,因爲它是按照這種方式定義的。
這意味着儘管它的外觀不對稱,C中的索引運算符[]
是可交換的。
這種傳統的演示是一樣的東西:
main() {
int x[] = { 1, 2, 3, 4 };
printf("%d\n", x[2]);
printf("%d\n", 2[x]);
}
這兩條線是等價的,打印同樣的事情。
+1來提及'x [2] == 2 [x]' - 這是我最喜歡的C語言部分,因爲它起初看起來不直觀,但是在你理解了它的理由之後,它具有非常數學的對稱性。 – 2009-10-21 01:58:55
這是爲什麼關閉?在這個世界上怎麼可能「標誌線做什麼?」不是一個真正的問題?我在這裏錯過了什麼嗎? – sbi 2009-10-18 12:25:43
我同意@sbi。 「初級問題」!=「不是真正的問題。」 – 2009-10-21 02:00:14