[英]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_int的array[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.