通过引用将字符串数组传递给C函数
我很难通过引用将一个字符串数组传递给函数。通过引用将字符串数组传递给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