我正在學習 C,而 C 是我的第一門編程語言。我先添加代碼。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int row = 3, col = 2;
int(*ptr)[2] = (int(*)[2])malloc(sizeof(int) * row * col);
if (!ptr) exit(1);
printf("%d", sizeof(*ptr[0]));
return 0;
}
4
也許,ptr[0]是指標或陣列。我應該認為ptr[0]是一個陣列嗎?
uj5u.com熱心網友回復:
int (*ptr)[2]宣告ptr是一個指向兩個陣列的指標int。
這意味著*ptr是一個包含兩個的陣列int。ptr[0]實際上與 相同*ptr,因此它也是一個包含兩個 的陣列int。
根據定義,ptr[0]意味著將零添加到ptr然后應用*。添加零不會改變值,因此ptr[0]有效*ptr。
設定ptr為(int (*)[2]) malloc(sizeof(int) * row * col);將其設定為指向可用作 3 個 2 陣列的記憶體int(因為row是 3 且col是 2)。所以這三個陣列是ptr[0], ptr[1], 和ptr[2]。
由于每個那些的是兩個陣列int,它們各自具有兩個元件,它們可以被作為訪問ptr[0][0],ptr[0][1],ptr[1][0],ptr[1][1],ptr[2][0],和ptr[2][1]。
請注意,下標運算子[ … ]可以與指標或陣列一起使用。在任何一種情況下,E1[E2]都定義為*((E1) (E2))。對于指標,此加法以指向型別為單位進行操作。當E1是一個指向兩個陣列的指標時int,加 1 或 2 會產生一個指標,該指標指向int記憶體中更遠的兩個陣列的 1 或 2 個(只要算術保持在適用空間的范圍內)。當E1是陣列時,它會自動轉換為指向其第一個元素的指標,然后像指標一樣進行算術運算。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/400657.html
標籤:C
上一篇:ctypes回傳字串陣列std::vector<std::string>>
下一篇:比較數字和陣列
