首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >*pt在int ( *pt )[2]和pt在int *pt之间有什么区别?

*pt在int ( *pt )[2]和pt在int *pt之间有什么区别?
EN

Stack Overflow用户
提问于 2019-09-29 03:09:15
回答 2查看 352关注 0票数 1

例如

代码语言:javascript
复制
    int (*pt)[4];
    int target[3][4] = {{1,3,4,6},{2,4,5,8},{3,4,6,7}};
    pt = target;
    *pt = target[0];

为什么是“错误无效数组分配”

EN

回答 2

Stack Overflow用户

发布于 2019-09-29 03:40:11

int (*pt)[4]pt声明为指向数组的指针。

C不允许分配数组;例如,您不能:

代码语言:javascript
复制
int a[4] = {1, 2, 3, 4};
int b[4];
b = a;

如果要复制数组,则需要使用循环,或者可以使用memcpy

代码语言:javascript
复制
memcpy(pt, target[0], sizeof target[0]);
票数 3
EN

Stack Overflow用户

发布于 2019-09-29 03:57:07

再加上Barmar给出的好答案,

代码语言:javascript
复制
int (*pt)[4];

声明指向int 4数组的指针。

代码语言:javascript
复制
int target[3][4] = {{1,3,4,6},{2,4,5,8},{3,4,6,7}};

声明一个int 4数组(其中3个在普通的2D数组中)

代码语言:javascript
复制
pt = target;

在access中,target被转换为指向其第一个元素的指针。(数组/指针转换)因为它的第一个元素是一个int 4数组,所以它被转换成一个int 4数组,它与pt类型兼容。请参阅C11标准- 6.3.2.1其他操作数-值、数组和函数指示符(P3)

代码语言:javascript
复制
*pt = target[0];

因为pt是一个指向int 4数组的指针,所以当您取消引用指针时,您将得到一个INT4数组-而数组不是lvalue,也不是可分配的。Id:(p1)

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

https://stackoverflow.com/questions/58151924

复制
相关文章

相似问题

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