简体   繁体   English

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

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

I read this question: what does the line int *(*(x[3])())[5];我读到这个问题: int *(*(x[3])())[5]; 行是什么? do in C? 在 C 中做什么?

which have the code line:其中有代码行:

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

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

According to http://cdecl.org/ this means根据http://cdecl.org/这意味着

declare x as array 3 of pointer to function returning pointer to array 5 of pointer to int将 x 声明为函数指针数组 3 返回指向 int 指针数组 5 的指针

Now I'm wondering about this part:现在我想知道这部分:

function returning pointer to array 5 of pointer to int函数返回指向 int 指针数组 5 的指针

How does the proto-type for a function returning pointer to array 5 of pointer to int look?返回指向 int 指针数组 5 的指针的函数的原型如何?

I tried this:我试过这个:

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

which doesn't compile.哪个不编译。

Then I tried然后我试过了

#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;
}

which compiles fine but now the return type is more like pointer to pointer to int .它编译得很好,但现在返回类型更像是pointer to pointer to int There is nothing that says pointer to array 5 of pointer to int没有什么可以说pointer to array 5 of pointer to int

So my question is:所以我的问题是:

Is it at all possible to write a function which returns pointer to array 5 of pointer to int ?是否有可能编写一个函数来返回pointer to array 5 of pointer to int

If yes, how does the proto-type look?如果是,原型看起来如何?

If no, what is the purpose of 5 in the declaration of x ?如果不是,那么x声明中5的目的是什么?

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

an array[5] of ints would be:整数array[5]将是:

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

and a pointer to that array (not just to the first element of it, but the whole array of 5!) would be:和指向该数组的指针(不仅指向它的第一个元素,而且指向整个 5 数组!)将是:

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

and a function returning such a pointer would be:返回这样一个指针的函数将是:

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

Following the same logic , an array[5] of pointers_to_int would be:按照相同的逻辑pointers_to_intarray[5]将是:

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

and a pointer to that array would be:指向该数组的指针将是:

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

and theeeen a function returning such a pointer would be:并且返回这样一个指针的函数将是:

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

Let's try it out:让我们试试看:

#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 output: clang prog.c -Wall -Wextra -std=gnu89 输出:

the value of the dereferenced 1st element of array_of_ptrs is: 6 array_of_ptrs 取消引用的第一个元素的值是:6

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

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