如果标题没有100%正确,请原谅我。我有一个函数,它接受两个输入--一个指向字符串的指针,一个指向数组(?)的指针。我写的功能是
int string_parser(char *inp, char **array_of_words[])
我想要做的是接受这两个参数,函数应该返回
char *inp)char **array_of_words[] -数组中的每个元素指向每个单词中第一个字符的地址(如果这是文字,我很抱歉)
我已经创建了指向指针数组的指针,并为这个数组分配了空间。
char **startOfWords_ptr = (char **) malloc(amountOfWords * sizeof(char*));
一直在操纵内容。我现在想把*start_of_words上的数组传回给array_of_words,但是我不知道怎么做使用*array_of_words = *(startOfWords_ptr);,我是说:指针指向指针数组的起始地址吗?
我当然不是因为我在印刷时没有得到相同的价值.
printf("%p\n", (void *) *array_of_words); // 0x401f2c, o
printf("%p\n", (void *) *startOfWords_ptr); // 0x401f2c, o
printf("%p\n", (void *) array_of_words[1]); // 0x401f2c, o
printf("%p\n", (void *) startOfWords_ptr[1]); // 0x401f30, t以意见作为产出的建议
*array_of_words = (startOfWords_ptr); // This currently does not work
printf("%p, %c\n", (void *) array_of_words[0], *array_of_words[0]); // 0xcbbdd0, ;
printf("%p, %c\n", (void *) startOfWords_ptr[0], *startOfWords_ptr[0]); // 0x401f3b, o
printf("%p, %c\n", (void *) array_of_words[1], *array_of_words[1]); // 0x401f2c, o
printf("%p, %c\n", (void *) startOfWords_ptr[1], *startOfWords_ptr[1]); // 0x401f3f, t发布于 2017-03-24 22:05:39
好的,让我们从这个函数的调用者的角度来看这个:
int main( void )
{
char my_input[] = "This is a test";
char **my_output = NULL;
int count = string_parser( my_input, &my_output );
for ( int i = 0; i < count; i++ )
printf( "pointer #%d: %p\n", i, (void *) my_output[i] );
}我们知道,在调用string_parser之后,my_output将指向指向char的一系列指针中的第一个。因为我们需要修改my_output的值,所以必须在调用(&my_output)中传递指向它的指针。
这意味着string_parser的原型需要
int string_parser( const char *inp, char ***array_of_words )
{
...
}在函数参数声明的上下文中,T a[N]和T a[]都被视为T *a,因此char ***array_of_words与char **array_of_words[]相同--最终都是char ***。
所以给你
我已经创建了指向指针数组的指针,并为这个数组
char **startOfWords_ptr = (char **) malloc(amountOfWords * sizeof(char*));分配了空间,并且一直在很好地操作内容。我现在想把*start_of_words上的数组传回给array_of_words,但是我不知道怎么做
你把它倒过来了--你把startOfWords_ptr分配给*array_of_words
*array_of_words = startOfWords_ptr; // char ** = char **array_of_words的间接方向比startOfWords_ptr多一个级别,因此我们需要取消引用它以获得匹配的类型。在这次任务之后,
*array_of_words[i] == startOfWords_ptr[i] // char * == char *发布于 2017-03-24 21:35:53
函数签名中的这个参数:
char **array_of_words[]可以重写为:
char ***array_of_words也就是说,要么把它写成:
char **array_of_words或作为:
char *array_of_words[]这非常类似于编写main()的第二个参数的不同方式。
https://stackoverflow.com/questions/43008662
复制相似问题