【发布时间】:2021-09-28 14:06:50
【问题描述】:
我需要将指针返回函数分配给数组,可以吗?
#include <stdio.h>
int * arrayReturn(int *q){ // example function
return q;
}
int main()
{
int z[3] = { 1 , 2 , 3};
int q[3];
q = *(int [3]) arrayReturn(z);
printf("%d %d %d", q[0],q[1], q[2]);
return 0;
}
下面的代码接近我想要的,但这不再是一个数组了。
int (*c)[3] = (int(*)[3])arrayReturn(z);
printf("%d %d %d", c[0][0],c[0][1], c[0][2]);
【问题讨论】:
-
不,数组不是指针
-
没有。您不能更改现有对象的地址。
-
只需将
q声明为int *。 -
在将
q设为数组时,您希望获得什么优势?您是否尝试将数据从z复制到新空间q?还是您只是想要另一种方式来指向z中的数据? -
您可能认为您需要一个数组才能使用
q[0],但事实并非如此。当我们知道指针指向数组时,使用方括号对我们来说是一种“语法糖”。q[2]与*(q + 2)的表达式相同。具有数组名称的表达式衰减为指向该数组第一个元素的指针。