繁体   English   中英

函数返回指向 int 指针数组 5 的指针

[英]Function returning pointer to array 5 of pointer to int

我读到这个问题: int *(*(x[3])())[5]; 行是什么? 在 C 中做什么?

其中有代码行:

int *(*(*x[3])())[5];

在这个答案https://stackoverflow.com/a/37364752/4386427

根据http://cdecl.org/这意味着

将 x 声明为函数指针数组 3 返回指向 int 指针数组 5 的指针

现在我想知道这部分:

函数返回指向 int 指针数组 5 的指针

返回指向 int 指针数组 5 的指针的函数的原型如何?

我试过这个:

int* g()[5]    <---- ERROR: 'g' declared as function returning an array
{
    int** t = NULL;
    // t = malloc-stuff
    return t;
}

哪个不编译。

然后我试过了

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

int *(*(*x[3])())[5];

int** g()
{
    int** t = NULL;
    // t = malloc-stuff
    return t;
}

int main(void) {
    x[0] = g;
    return 0;
}

它编译得很好,但现在返回类型更像是pointer to pointer to int 没有什么可以说pointer to array 5 of pointer to int

所以我的问题是:

是否有可能编写一个函数来返回pointer to array 5 of pointer to int

如果是,原型看起来如何?

如果不是,那么x声明中5的目的是什么?

int *(*(*x[3])())[5];
                  ^
                what does 5 mean here?

整数array[5]将是:

int array[5]; /* read: array of 5 ints */

和指向该数组的指针(不仅指向它的第一个元素,而且指向整个 5 数组!)将是:

int(* ptr)[5] = &array; /* read: pointer to an array of 5 ints */

返回这样一个指针的函数将是:

int(* g())[5]; /*read: a function returning a pointer to an array of 5 ints */

按照相同的逻辑pointers_to_intarray[5]将是:

int* array_of_ptrs[5]; /* read: array of 5 pointers_to_int */

指向该数组的指针将是:

int* (* PTR)[5] = &array_of_ptrs; /* read: pointer to an array of 5 pointers_to_int */

并且返回这样一个指针的函数将是:

int* (* g())[5] /* read: function returning a pointer to an array of 5 pointers_to_int*/
/* just like @EOF said in the comments above! */

让我们试试看:

#include <stdio.h>

int array[5] ={1, 2, 3, 4, 5};

int a = 6, b = 7, c = 8, d = 9, e = 10;
int* array_of_ptrs[5] = {&a, &b, &c, &d, &e};

int(* g())[5] 
{
    return &array;
}

int* (* gg())[5]
{
    return &array_of_ptrs; 
}

int main()
{
int(* ptr)[5]; 
ptr = g();

int* (* PTR)[5];     
PTR = gg();
    
printf
("the value of the dereferenced 1st element of array_of_ptrs is: %d", *(*PTR)[0]);  

return 0;
}

clang prog.c -Wall -Wextra -std=gnu89 输出:

array_of_ptrs 取消引用的第一个元素的值是:6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM