首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数将指针返回到指针到int的数组5。

函数将指针返回到指针到int的数组5。
EN

Stack Overflow用户
提问于 2016-05-21 16:13:34
回答 1查看 191关注 0票数 0

我读了这个问题:(x[3])())[5]; do in C?

其中有代码行:

代码语言:javascript
复制
int *(*(*x[3])())[5];

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

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

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

现在我想知道这部分:

函数将指针返回到指针到int的数组5。

函数的原始类型如何将指针返回到指针到int的指针的数组5?

我试过这个:

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

这并不能编译。

然后我试着

代码语言:javascript
复制
#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的函数?

如果是的话,原版看上去怎么样?

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

代码语言:javascript
复制
int *(*(*x[3])())[5];
                  ^
                what does 5 mean here?
EN

回答 1

Stack Overflow用户

发布于 2020-10-21 12:04:28

array[5] of ints将是:

代码语言:javascript
复制
int array[5]; /* read: array of 5 ints */

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

代码语言:javascript
复制
int(* ptr)[5] = &array; /* read: pointer to an array of 5 ints */

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

代码语言:javascript
复制
int(* g())[5]; /*read: a function returning a pointer to an array of 5 ints */

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

代码语言:javascript
复制
int* array_of_ptrs[5]; /* read: array of 5 pointers_to_int */

指向该数组的指针是:

代码语言:javascript
复制
int* (* PTR)[5] = &array_of_ptrs; /* read: pointer to an array of 5 pointers_to_int */

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

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

我们试试看:

代码语言:javascript
复制
#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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37365291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档