我读了这个问题:(x[3])())[5]; do in C?
其中有代码行:
int *(*(*x[3])())[5];在这个答案中,https://stackoverflow.com/a/37364752/4386427
根据http://cdecl.org/,这意味着
将x声明为指针函数的数组3,返回指针到数组5的指针到int
现在我想知道这部分:
函数将指针返回到指针到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的函数?
如果是的话,原版看上去怎么样?
如果不是,5在x声明中的目的是什么?
int *(*(*x[3])())[5];
^
what does 5 mean here?发布于 2020-10-21 12:04:28
array[5] of ints将是:
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;
}C -Wall -Wextra -std=gnu89输出:
array_of_ptrs被取消引用的第一个元素的值是:6
https://stackoverflow.com/questions/37365291
复制相似问题