c - 是否可以在 C 中将指针分配给数组或将数组的地址更改为指针地址?
问题描述
我需要将指针返回函数分配给数组,可以吗?
#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]);
解决方案
不,您不能像在此处那样重新分配数组:
int q[3];
q = *(int [3]) arrayReturn(z);
如果要复制 to 的内容,可以使用库函数:z
q
memcpy
memcpy( q, z, sizeof z );
但该=
运算符未定义为复制数组内容。
否则,你能做的最好的就是声明q
为一个指针并让它指向第一个元素z
:
int *q = z; // equivalent to &z[0]
除非它是sizeof
或一元运算符的操作数*
,或者是用于在声明中初始化字符数组的字符串字面量,否则“N 元素数组T
”类型的表达式将被转换或“衰减”为键入“pointer to T
”,表达式的值将是数组第一个元素的地址——这就是上述赋值有效的原因。
C 中的数组是元素的简单序列——没有指示它们的大小或类型的元数据,也没有指向第一个元素的单独指针。如声明的那样,数组是
+---+
z: | 1 | z[0]
+---+
| 2 | z[1]
+---+
| 3 | z[2]
+---+
...
+---+
q: | ? | q[0]
+---+
| ? | q[1]
+---+
| ? | q[2]
+---+
没有单独的对象q
可以分配给.
推荐阅读
- vb.net - 在csv中重复列名的末尾添加计数器
- python - Detrending Non-Stationary Time Series with MultiIndex?
- django - 在 Lightsail 终端中重新启动 Apache
- python - 如何使用 Pandas 在 csv 中查找缺失的行?
- nlog - 使用 NLog 将日志重定向到 json 文件
- laravel-excel - 从多维集合创建带有单元格的“表格”外观
- javascript - Angular 全局 css 文件 css 不适用于其他组件
- r - 在 R 中使用 Image.plot 在顶部水平的颜色条
- wordpress - 如何按功能向类别添加主要术语选项?
- postgresql - Postresql:如何使用另一个表中的值更新列中的空值?