2011-03-11 41 views
0

對於我正在處理的任務,我需要使用函數來處理字符串數組中的數據。所以真的是一個字符數組的數組。我這樣定義數組:將一個指向字符數組的數組的指針傳遞給一個函數?

char strings[5][100]; 

所以在內存中大概有500個連續的字符。我已經定義函數如下:

void foo(char *labels[100]); 

我想我可能有一些語法問題在這裏,但我認爲這是做的是說,「我期望一個指針數組的功能100個字符。「所以labels*會指向第一個字符數組,而(labels + 1)*會指向第二個數字,依此類推。我打電話的功能是這樣的:

foo(&strings[0]); 

我覺得這是什麼做的是抓住字符的第一陣列的地址strings。我收到的錯誤消息告訴我函數預計char **,但參數是char (*)[100]。這讓我感到困惑,因爲我沒有指定指向char指針的指針。

任何幫助是極大的讚賞,或者如果你能pointer我在正確的方向:)

+0

在大多數情況下,包括函數參數,'&strings [0]'與純字符串''完全相同。 – pmg 2011-03-12 00:11:46

回答

3

strings是二維數組。所以當它傳遞給一個函數時會衰減到char(*)[100]。相反,你可以有原型一樣 -

void foo(char labels[][100], int row); // `row` decides which param to access. 

void foo(char labels[][100], int row) 
{ 
    for(int i = 0; i < 100; ++i) // If you need, modify all the 100 row elements 
    { 
     labels[row][i] = 'a'; // Modifying like this 
     // .... 
    } 
} 
+0

然後,您也可以將它稱爲'foo(strings,row)'; – 2011-03-11 23:45:32

+0

-1'strings'衰變爲指向其第一個元素的指針。它的第一個元素是'char [100]'類型,所以'strings'衰變爲'char(*)[100]'類型的值;不是'char **' – pmg 2011-03-11 23:47:53

+0

謝謝,那修正了錯誤。如果我修改函數中的值,它們是否仍會從我調用它的位置進行修改? – Fred 2011-03-11 23:48:15

4
char strings[5][100] 

聲明strings與5個元素的數組。每個元素都是100個字符的數組。

void foo(char *labels[100]); 

聲明foo作爲返回void並接受指針數組的函數。 (100僅僅是裝飾:保留爲空或將42或10000是完全一樣的東西)

你想

void foo(char (*labels)[100]); 

其中參數是指向正好100個字符的陣列。

相關問題