我很難通過引用將一個字符串數組傳遞給函數。通過引用將字符串數組傳遞給C函數
char* parameters[513];
這是否代表513個字符串?這裏是我的初始化的第一個元素:
parameters[0] = "something";
現在,我需要按引用傳遞「參數」的功能,使功能可以添加多個字符串它。函數頭看起來如何,我將如何在函數內使用這個變量?
我很難通過引用將一個字符串數組傳遞給函數。通過引用將字符串數組傳遞給C函數
char* parameters[513];
這是否代表513個字符串?這裏是我的初始化的第一個元素:
parameters[0] = "something";
現在,我需要按引用傳遞「參數」的功能,使功能可以添加多個字符串它。函數頭看起來如何,我將如何在函數內使用這個變量?
你已經明白了。
#include <stdio.h>
static void func(char *p[])
{
p[0] = "Hello";
p[1] = "World";
}
int main(int argc, char *argv[])
{
char *strings[2];
func(strings);
printf("%s %s\n", strings[0], strings[1]);
return 0;
}
在C中,當您傳遞數組的函數,編譯器接通數組的指針。 (陣列「衰變」到一個指針。)的「FUNC」上方是完全等效於:
static void func(char **p)
{
p[0] = "Hello";
p[1] = "World";
}
由於一個指針數組傳遞,當修改的陣列,要修改的原始陣列和不是副本。
您可能想了解指針和數組在C中的工作方式。與大多數語言不同,在C中,指針(引用)和數組的處理方式有很多相似之處。一個數組有時會衰減到一個指針,但只在非常特定的情況下。例如,這不起作用:
void func(char **p);
void other_func(void)
{
char arr[5][3];
func(arr); // does not work!
}
謝謝。有效! – user246392 2011-03-04 04:10:46
Hi @Dietrich。你能向我解釋爲什麼後一種方法行不通。我正在研究一個類似的問題,我傳遞了一個'arr',它是一個包含4個字符串,長度爲5個字符的'[4] [6]'數組到一個'func',它將char **作爲參數。但是我無法檢索到我在被調用函數'func'中的callee函數中填充的字符串。任何幫助都是極好的! – tcpip 2017-06-26 06:26:30
你必須瞭解內存佈局。拿一張紙並畫東西,你會發現'char ** x'和'char y [4] [6]'是完全不相容的。編譯器應該給你錯誤信息。 – 2017-06-26 07:03:39
char* parameters[513];
是指向char
的513個指針的數組。這相當於char *(parameters[513])
。
一個指針,指向的是char *(*parameters)[513]
類型(這相當於char *((*parameters)[513])
)的,所以你的功能可能看起來像:
void f(char *(*parameters)[513]);
或者,如果你想有一個C++參考:
void f(char *(¶meters)[513]);
看起來不必要的複雜。 'char *參數有什麼問題[513]'? – 2011-03-04 04:08:31
@Dietrich Epp:它沒什麼問題。你如何定義這種類型的參考?我的答案是這個問題的答案。 – peoro 2011-03-04 04:10:29
不,它不是hw。 – user246392 2011-03-04 03:56:32
問題在於你的「字符串」保持未初始化,所以你的第二個代碼片段會損壞你的內存。 – 2011-03-04 03:57:13