我需要将一个字符指针数组的地址传递给一个函数,那个函数声明/原型语法是什么?
我试过了:
void myFunc(char &*a[]);
但得到预期; ,或)之前&错误。
我也尝试过:
void myFunc(char **a);
由于我传入的指针确实是一个指向指针的指针,但是我得到了另一个错误。这次错误与预期char **
有关,但得到char *[]
或类似的东西。我已经尝试过其他解决方案,所以我不记得确切的错误。
有什么建议吗?
答案 0 :(得分:4)
假设您有一个声明为
的数组char *a[N];
并且您希望将指针传递给数组,如
foo( &a );
然后foo
的原型需要
void foo( char *(*aptr)[N] );
请注意,在这种情况下,必须声明数组的大小;指向N元素数组的指针与指向M元素数组的指针的类型不同。
通常,你不想这样做;相反,你通常会像这样传递数组表达式:
foo ( a );
并且相应的原型将是:
void foo ( char **aptr );
除非它是sizeof
或一元&
运算符的操作数,或者是用于在声明中初始化另一个数组的字符串文字,否则表达式为“N-element array of T
“将被转换(”衰减“)到”指向T
的指针“类型的表达式,表达式的值将是数组的第一个元素的地址。
答案 1 :(得分:2)
鉴于你在评论中所说的内容,不需要传递指向数组的指针。您只需将指针传递给数组的第一个元素即可。这样的指针就足够了,因为数组的其余元素显然位于第一个元素之后。
要编写一个在指向char
的指针数组中设置指针的函数,请执行以下操作:
void MyFunction(int NumberToSet, char *Pointers[])
{
for (int i = 0; i < NumberToSet; ++i)
{
Pointers[i] = SomeString;
}
}
在上文中,SomeString
必须具有“char
指针”类型。这可以是一个字符串,例如"Hello"
,或char
的数组(自动转换为指向char
的指针),或者某个标识符x
例如,声明为char *x
(并已初始化或已分配)。
要使用此功能,请按以下方式调用:
char *MyArrayOfPointers[SomeNumber];
MyFunction(NumberOfPointersIWantToSet, MyArrayOfPointers);
在大多数情况下,要将char
的指针数组传递给函数,只需传递第一个元素的地址即可。在这种情况下,您将使用其中任何一个(它们是等效的):
void myFunc(char **a)
void myFunc(char *a[])
如果你真的想传递数组的地址,你可以使用:
void myFunc(char *(*a)[])
在这种情况下,a
的类型不完整,因为缺少维度。根据您对a
的意图,您可能需要在声明中提供维度。
当调用myFunc
并向其传递一些声明为char *array[N];
的数组时,您将在前一种情况下将其传递为myFunc(array)
,在后一种情况下传递为{{1} }}
答案 2 :(得分:1)
尝试将其作为函数定义void myFunc(char *a[])
或void myFunc(char **a)
,然后以这种方式使用它:
char *arr[20];
myFunc(arr);
答案 3 :(得分:1)
声明
void myFunc(char &*a[]);
不是有效的C语法 要传递字符指针数组的地址,请改用
void myFunc(char *(*a)[]);
上述函数中的 *(*a)[]
将 a
声明为指向char
s 指针数组的指针。必须注意a
具有不兼容的类型。 []
需要后缀才能完成。
答案 4 :(得分:1)
好的,你几乎走在正确的道路上。 void myFunc(char *a[]);
实施例
void fun(char *a[]){
printf("%s",*a); //for accessing the next element do a+1
}
int main(void) {
char *x[3];
x[0]="abcd";
fun(x); // here you are passing the address first array element
return 0;
<强> DEMO 强>
答案 5 :(得分:-1)
首先,C通常是“通过引用传递”语言。某些数据项(如整数,浮点数和单个字符)可以按值传递。但是,那些相同数据类型的数组总是通过引用传递。
因此,当你说“我需要将函数传递给函数时,字符指针数组的地址”然后只需在函数原型中声明一个字符指针数组:
void myFunc(char *a[]);
因此,char *
声明了一个char指针,a[]
定义了它们的数组。要检查此声明,请参阅:http://www.cdecl.org/将此表达式解析为“声明一个指向char的指针数组”。
技术要点是*
与char
绑定,而不是与a[]
绑定。
因此,C将传递指向您声明的数据结构的指针。关于这个主题的讨论可以深入研究双指针,但对于这个问题,这样的讨论可能不是主题。