看來,我不知道實際上 char *(arr[5])
和char (*arr)[5]
之間的差在邏輯上,因爲它與類型定義,char *(arr[5])
是一個指向數組的指針,char *arr[5]
是char
指針的數組,那麼(*arr)[5]
會是什麼呢?或者它沒有區別?差(ARR [5])和炭(* ARR)[5]
我做了一些測試,發現這3個聲明是不同的。 例如,如果我使用char (*arr)[5]
它完全允許我這樣做arr = malloc(2)
,否則它呻吟非法轉換。
有人能解釋這些聲明之間的差異,當使用它們,這將是一個巨大的加號,如果這也包括可能我做arr = malloc(2)
動態分配[5]字符數組,因爲它讓我在使用char (*arr)[5]
時雖然給我堆棧溢出,但在語義上這樣做。 (免責聲明:[]
表明堆棧分配,因此它並沒有多大意義,因爲堆內存地址不能指向只要我不知道堆棧存儲器地址)
'字符(* ARR)[5]'是一個指向5'char's一個數組...我想'字符*( arr [5])'只是一個指向'char'的5個指針的數組,與沒有括號相同? – Dmitri
@Dmitri真是有道理,但EiC c解釋器找到他們的不同。這是我困惑的地方。 – Malina
'char(* arr)[5]'和'char *(arr [5])* * *是不同的。它是'char *(arr [5])'和'char * arr [5]',我認爲它們是相同的。 – Dmitri