首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >二维数组的指针运算中的类型转换(C)

二维数组的指针运算中的类型转换(C)
EN

Stack Overflow用户
提问于 2019-02-21 03:01:23
回答 1查看 44关注 0票数 -2

当我想用指针arithmetic.If手动索引一个二维数组的特定数组元素时,我需要进行类型转换吗?为什么?我的意思是:

代码语言:javascript
复制
float *p;
float balance[5][2]={2.34, 
5.66,7.85,12.56,9.87,76.22,56.55,21.02,66.12,10.001};
p=(float *) balance;   //Do I need this type casting and if so why?    
printf("%.2f",*(p+(3*2)+1));  
EN

回答 1

Stack Overflow用户

发布于 2019-02-21 03:23:40

Balance是一个二维数组,它是一个数组的数组。它将像任何数组一样衰减为指向其第一个元素的指针...但是这个元素仍然是一个数组,而不是一个浮点数!

这就是为什么这里需要强制转换的原因,但实际上,将指向数组的指针转换为指向其第一个元素的指针并不是真正标准的明智做法。正确的方法是取消引用balance:它将是一个一维数组,它将很好地衰减为指向第一个浮点数的指针:

代码语言:javascript
复制
p = *balance;    // no cast required here

这就是说,从学究的角度来看,下一行(*(p+(3*2)+1))将一个2x5的二维数组命名为一个大小为10的一维数组。一旦索引大于这里的行大小2,其结果就没有按照标准定义。当然,所有常见的实现都允许它与旧代码兼容,但你真的应该想一想为什么你需要它,并尽可能避免这种情况。

正确和一致的方法应该是:

代码语言:javascript
复制
float (*pp)[2];
float balance[5][2] = { 2.34,
    5.66,7.85,12.56,9.87,76.22,56.55,21.02,66.12,10.001 };
pp = balance;
printf("%.2f\n", pp[3][1]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54793505

复制
相关文章

相似问题

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