我有一個變量類型:如何在C中傳遞char(*)([long unsigned int])作爲參數?
char (*p)[12] = calloc(n, sizeof(*p));
我需要的變量保持這樣,但我有把它當作一個參數的麻煩,由於功能型給我的錯誤:
void myMethod(char *p) { ... }
我可以在myMethod中使用哪些參數來使其工作?
我有一個變量類型:如何在C中傳遞char(*)([long unsigned int])作爲參數?
char (*p)[12] = calloc(n, sizeof(*p));
我需要的變量保持這樣,但我有把它當作一個參數的麻煩,由於功能型給我的錯誤:
void myMethod(char *p) { ... }
我可以在myMethod中使用哪些參數來使其工作?
使用相同類型的參數,像你一樣的副本爲變量:
void myMethod(char (*p)[12])
{
// do something with p
}
...
char (*p)[12] = calloc(n, sizeof *p);
myMethod(p);
記住p
是指向的char
12元件陣列,而不是一個簡單的指針char
。因此,p[i]
的類型將是char [12]
(其在大多數情況下將衰減到char *
)。
典型的C語言習慣是通過char*
和size_t
(或unsigned int
或任何等效的參數)參數。然後該函數的契約是它將尊重size_t
參數作爲數組/緩衝區的長度。
如果您必須堅持指針未更改,則使用const
限定符。
在一般情況下,這是真的,我認爲這可能是更乾淨的沒有size_t,因爲數組大小是恆定的 – Swiss 2012-03-03 16:41:53
我可以在myMethod的用什麼作爲參數,使這項工作
可能這:
void myMethod(char (*p)[12])
char (*p)[12] = ...
與以前你有不定義的12個元素的數組,每個元素都是一個指向char的指針但是指向具有12個char元素的數組的指針。在
int *a[3];
開始:
如以下行說明。向右看,說大小爲3的數組。向左看,說出指針。看正確,什麼都看不到。向左看,說int。所有你一起說a是一個int大小3指針的數組。
添加括號時會很奇怪:
int (*a)[3];
括號更改順序,就像在一個表達式。當你在a後面看時,你會看到右邊的圓括號,在你向左看時你不能跳過。因此,你會說a是一個指向3個整數的指針。
檢查這些鏈接,更好的解釋:
不過,如果你想將數組傳遞給函數,你可以複製它,或者因爲它是一個數組傳遞指向第一個元素的指針(您可以簡單地通過使用數組名稱來完成):
myMethod(p) <- how you call the function
我個人傾向於後一種情況下,因爲你傳遞給函數的簡單的指針,而不是數組的所有元素
否 - 他已宣佈'p'爲指向12個元素的數組'char',而不是指向'char'的指針數組。 – 2012-03-03 16:35:37
@JohnBode - 讓我注意到......我只是靠在牆上!但是,嘿,我只是證明你可以從答案中學習! – Matteo 2012-03-03 16:51:19
我認爲你的意圖可能是使用'char * p [12]'而不是你在這裏。 – Swiss 2012-03-03 16:46:40