Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回数组指针的函数的C语言语句是什么?_C_Arrays_Function_Pointers - Fatal编程技术网

返回数组指针的函数的C语言语句是什么?

返回数组指针的函数的C语言语句是什么?,c,arrays,function,pointers,C,Arrays,Function,Pointers,对于接受指向字符的指针作为参数并返回指向整数数组的指针的函数,C代码是什么 我有点困惑。我的答覆如下: int * q (char *) [ ] 我不确定我是否正确。但是如果它不正确,那么正确的答案是什么?更重要的是,回答它的方法是什么。一般来说,我想了解任何一种通用的方法来解释这些问题,并将它们转换成C代码。< P>处理函数时,基本上需要考虑数组作为指针,因为它非常困难(如果可能的话)。在函数中传递或返回数组,并使sizeof运算符等操作仍按预期工作 对于您来说,int**q(char*)就

对于接受指向字符的指针作为参数并返回指向整数数组的指针的函数,C代码是什么

我有点困惑。我的答覆如下:

int * q (char *) [ ]

我不确定我是否正确。但是如果它不正确,那么正确的答案是什么?更重要的是,回答它的方法是什么。一般来说,我想了解任何一种通用的方法来解释这些问题,并将它们转换成C代码。

< P>处理函数时,基本上需要考虑数组作为指针,因为它非常困难(如果可能的话)。在函数中传递或返回数组,并使
sizeof
运算符等操作仍按预期工作


对于您来说,
int**q(char*)
就足够了,尽管您无法通过这种方式知道返回数组的长度。

我想我看到了您的困惑所在,并且我不确定是否已根据您选择的答案清除了它
int**q(char*)
是一个返回指向int的指针的函数,如果这是您所需要的,这很好,但是要理解,函数返回指向int的指针的唯一方法是:(1)int数组(指向数组的指针)的地址作为参数传递给
q
,或者(2),指针在
q
中分配,并返回指向已分配指针的指针

您似乎想要(1),但已为(2)选择了答案。看一看哪一个总是有助于破译声明

帮助您解决问题的最佳方法可能是每种方法的一个示例。下面的示例仅使用字符变量
c
(默认情况下,ASCII
'5'
为十进制
53
)的ASCII值。在第一种情况下,返回指向int的指针(这是指向包含零个或多个整数的内存块的指针)。例如,这里分配了一块内存来保存由
53-105
中的值填充的
53
整数:

#include <stdio.h>
#include <stdlib.h>

int *q (char *c)
{
    int *a = calloc (*c, sizeof *a);

    if (a)
        for (int i = 0; i < (int)*c; i++)
            a[i] = *c + i;

    return a;
}

int main (int argc, char **argv) {

    char c = argc > 1 ? *argv[1] : '5';
    int *array = NULL;

    if ((array = q (&c)))
        for (int i = 0; i < (int)c; i++)
            printf ("array[%3d] : %d\n", i, array[i]);

    free (array);   /* don't forget to free mem */

    return 0;
}
示例使用/输出

在每种情况下,如果未向程序传递任何参数,则默认输出为:

$ ./bin/qfunction2
array[  0] : 53
array[  1] : 54
array[  2] : 55
...
array[ 50] : 103
array[ 51] : 104
array[ 52] : 105
现在完全不清楚您要的是这两种情况中的哪一种,因为您似乎解释了希望返回一个指向整数数组的指针。正如我在上一个答案开始时所说的,你不能返回一个数组,你只能返回一个指针,但是这个指针可以指向一个可以保存多个整数的内存块,或者它可以指向一个保存多个指针的内存块,每个指针都可以被分配来保存多个整数

因此,歧义出现在“您希望返回指向整数数组还是指针数组?”
int*q(char*)
是第一个,而
int**q(char*)
是第二个

现在,继续前进,您将认识到您没有提供一种方法来知道返回了多少个整数(或指针)。(这至少需要一个额外的参数或全局变量(不鼓励)。这是留到另一天。(这也是为什么示例是对
53
的ASCII值的播放,或者无论第一个参数的第一个字符是什么,它都提供了一个固定的值来知道分配了什么)


我很乐意提供进一步的帮助,但我需要澄清一下您试图实现的目标。

指向整数数组的指针如下所示:

int (*p)[];
可选择在方括号内标注尺寸

因此,返回的函数如下所示:

int (*func(char *))[];
请注意,“指向数组的指针”与“指向数组第一个元素的指针”是不同的。有时人们说前者是指后者。如果您实际上是指后者,那么您的函数可以更简单:

int **func(char *);
第一种形式很少使用,因为除了将返回值衰减为
int**
之外,您无法处理它。如果函数总是返回指向固定大小缓冲区的指针,那么指定维度有时会很有用,但在这种情况下,我建议使用typedef以提高可读性:

typedef int ARR_4_INT[4];

ARR_4_INT * func(char *);

可以有一个指向(固定大小)数组的指针,但它在某些多维数组的上下文中最有用。是否返回指向动态分配内存的指针?
int*q(char*){insert function content here}
正确。您还想知道什么?但这是一个指向函数的指针。根据我想你是对的问题,这不是必须的。我不知道为什么我读到你想要一个*指针,指向返回
int*
的函数。我的错。
typedef int ARR_4_INT[4];

ARR_4_INT * func(char *);