非字符串指针如何转化为数组使用?

setdefault 2005-07-19 04:17:19
在字符串使用中
char hs[]="Hello";
char *s = hs;
s[0]='o';
指针可以转化成数组来引用其中内容。

但对于其他类型
float hs[]={1.0, 2.0, 3.0, 4.0};
float *s = hs;
s[0]=0.12; //不行啊

请教应怎么办?



...全文
295 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
YanDong_8212 2005-07-22
  • 打赏
  • 举报
回复
你的问题是数组不能分配那么多空间,如果你把数组维数改为10,10,10,就没问题了。
指针那儿是没错的,这是标准C里面的例子。
setdefault 2005-07-20
  • 打赏
  • 举报
回复
float (*pf)[102][103];
编译通过。运行时Stack overflow
handsomerun 2005-07-20
  • 打赏
  • 举报
回复
float (*pf)[102[103]; ??

float (*pf)[102][103]; ??
呵呵
setdefault 2005-07-20
  • 打赏
  • 举报
回复
好像不行啊。YanDong_8212。
#include "iostream.h"
int main(int argc, char* argv[])
{
float f1[101][102][103];
float (*pf)[102[103]; //这儿就报错。'pf' : undeclared identifier ....
pf = f1;
pf[0][0][0]=99.99;
cout<<pf[0][0][0]<<"\n";
return 0;
}
setdefault 2005-07-20
  • 打赏
  • 举报
回复
YanDong_8212(谢科),先谢谢了。我试试。
不用动态分配。
三维数组是已经存在的数据,现在我有数据存放的头地址指针。想用数组方式来访问数据。
YanDong_8212 2005-07-20
  • 打赏
  • 举报
回复
其实数组跟指针的区别也不是很大,既然你都用了数组了,那就用数组表示不是多方便吗。你是不是要动态分配三维数组噢?
YanDong_8212 2005-07-20
  • 打赏
  • 举报
回复
可以用指针数组,不过定义要改
float f1[101][102][103];
float (*pf)[102[103];
pf = f1;
然后就可以用pf[i][j][k]了
setdefault 2005-07-20
  • 打赏
  • 举报
回复
fisker0303:
是OpenGL里面用到的控制点阵。呵呵,没办法。
菲斯可儿 2005-07-20
  • 打赏
  • 举报
回复
三维数组,真的必须要用吗?
恐怖中....
setdefault 2005-07-20
  • 打赏
  • 举报
回复
redspider9999(亢龙有悔),谢谢
加1?没有啊。
如果不同的系统还有差别,那不是死定了。
编译器上有强制的编译参数么?
谁还有更好的办法?
redspider9999 2005-07-20
  • 打赏
  • 举报
回复

多维数组下只能用后面的方式,不过在不同的系统下写法应该也不一样,有的数组是按行存储,有的是按列存储

pf[(1*102+2)*103+3]=0.12 ,为什么写的时候前两维都加了1,不用吧
setdefault 2005-07-20
  • 打赏
  • 举报
回复
谢谢各位。不好意思。问题提得有问题。自己没有先试一下。
在一维数组得情况下正如楼上面xiaochongvip说的代码可以通过。

我真正得情况是在多维数组得情况下,如何办?
float f1[101][102][103];
float *pf;
pf = &f1[0][0][0];
pf[1][2][3]=0.12//这样不行
pf[(1*102+2)*103+3]=0.12//这样才行,但用起来有点麻烦,有好办法没有。
setdefault 2005-07-20
  • 打赏
  • 举报
回复
谢谢各位了。
YanDong_8212的代码在C++ Builder上修改后通过了,
vc6上怎么运行时有错呢?
明天早上揭帖。
handsomerun 2005-07-19
  • 打赏
  • 举报
回复
不好意思,用了那么长时间的c++,从来对于指针都是用*(pp + 1),所以呵呵…………
真不好意思

嗯,嗯

函数的返回类型不能是数组的啦
,如果你
int pi[10] = {10, 20, 30, 40};

return pi的话,返回的是一个int *
表示的是数组的地址

你的问题在哪呢,是在哪出错呢,你把那段代码贴出来看看呢
youngwolf 2005-07-19
  • 打赏
  • 举报
回复
int pi[10] = {10, 20, 30, 40};
int* pp = pi;
CString str;
str.Format("%d,%d,%d", pp[1], 1[pp], *(pp + 1));
AfxMessageBox(str);

C编译器对pp[1], 1[pp], *(pp + 1)基本上是一致处理的。不要乱下结论。
setdefault 2005-07-19
  • 打赏
  • 举报
回复
不是返回局部变量的指针。作为返回值能是数组类型么?
handsomerun 2005-07-19
  • 打赏
  • 举报
回复
我怀疑楼主是因为返回了局部变量的指针

“原来是数组,因为函数返回后只能是指针了”

这句话让我很寒阿

YanDong_8212 2005-07-19
  • 打赏
  • 举报
回复
我也觉得奇怪,应该可以用[]啊,单步跟踪一下,应该是其他地方出错了。
你把出错信息贴出来
xiaochongvip 2005-07-19
  • 打赏
  • 举报
回复
谁说的不行,你怎么写的啊,
这个程序,
#include "stdafx.h"
#include "iostream.h"
int main(int argc, char* argv[])
{

float hs[]={1.0, 2.0, 3.0, 4.0};
float *s = hs;
s[0]=0.12;
cout<<s[0]<<"\n";
return 0;
}
运行结果是0.12
setdefault 2005-07-19
  • 打赏
  • 举报
回复
毛毛,先谢了。
再看看有没有其他的建议。
加载更多回复(4)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧