C++ 数组赋值 以及数组指针

myeclispe 2008-10-22 02:27:17
1.发现将一个数组在头文件中声明后再在cpp文件初始化时无法直接赋值
比如int tt[2];
tt={0,1};这样不行;
只能这样,tt[0]=0,tt[1]=1;
请问有没有办法将可以将数组是声明和初始化分开?用一个一位数组指针可以吗?

2. 如何声明一个数组指针,指向一个一维数组.
先初始化一个数组,再将数组赋值给一个指针是可以的(?????).比如 int tt[]={3,4}; int *p=&tt;
但先声明指针再赋值变量却不行,比如int *p;p={1,2};

到这里出现了一个疑问,按理从int *p来看应是一个指向int型变量的值,编译器为什么允许指向一个int数组?
这些都是JAVA的后遗症,在JAVA里数组声明和初始化是可以分开的.
...全文
7484 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmlwyh 2011-05-04
  • 打赏
  • 举报
回复
www.h 中定义
double* ireg1 ;
double* ireg2 ;
..........

www.cpp中定义
double ireg1v[34]= {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 8, 8, 21, 23, 29, 30, 31, 32} ; ireg1=ireg1v;
double ireg2v[43]= {1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 7, 7, 8, 8, 9, 10, 10, 10, 16, 16, 18, 20, 20, 20, 21, 22, 23, 24, 24, 24} ; ireg2=ireg2v;

koo8 2008-10-22
  • 打赏
  • 举报
回复
想用数组的话恐怕没有办法实现,
我理解的原因是:因为数组名是该数组元素的首地址,你不可能一次初始化完成整个数组所有元素的值。
myeclispe 2008-10-22
  • 打赏
  • 举报
回复
怎么没人回答了?
myeclispe 2008-10-22
  • 打赏
  • 举报
回复
int *tt = new int[2] ;
int *tt={1,2};
估计是编译器把第一个当作结构体处理了,其实仔细想一下,如果编译器支持的化,第二个也是可以的.

没有人回答这个问题吗?
请问有没有办法将可以将数组的声明和初始化分开?
我定义了一个结构体:
struct Preloginpacket{
struct Header *header;
BYTE randomKey[16];
BYTE subCommand;
BYTE unKnownBytes1[2];
BYTE unKnownBytes2[4];
BYTE tail;
};
那个16个randomkey数组只能一个一个复制了?因为发现这样是不行的
Preloginpacket preloginpacket;
preloginpacket->randomKey={0x,x,x,x,x***};
只能这样
tmp={0x,x,x,x,x***};
for( int i=0;i<16;i++)
{
preloginpacket->randomKey[i]=temp[i];
}
不紧麻烦,而且这样一来赋值时就多申请了一段空间.


chihz3800 2008-10-22
  • 打赏
  • 举报
回复
好好看书!数组的名称是指向该数组第一个元素的指针,当然不能是tt={0,1}啦!
HelltoHell 2008-10-22
  • 打赏
  • 举报
回复
如果我没记错的话,C语言的数组存储的是指针,比如int tt[2]与int *tt = new int[2]作用大概一样

第一个问,用一个一维数组指针是不行的;至于怎样直接对数组赋值这个不清楚,可以尝试使用字符串,或者自己写个iString类include进去算了:P

第二个问题,因为C语言的的数组存储的是指向第一个元素的指针(即,tt = &tt[0])所以,tt其实是一个int*类型,当你先初始化数组再给指针赋值的时候,实际上C里面只是把指针copy一下;而先声明指针的话,指针指向的是int类型,你把一组数填入一个数的空间当然不行啦……

p.s. int *p; p是指针类型,它的值是其指向的int数据的内存地址,*p才是它所指向的int数据的值
chenzhp 2008-10-22
  • 打赏
  • 举报
回复
但先声明指针再赋值变量却不行,比如int *p;p={1,2};

========== 这样当然不行。一个指针指向的是一个地址,{1,2}是什么东东?
myeclispe 2008-10-22
  • 打赏
  • 举报
回复
自己回答下,上面的理解有问题,int *p指向一维数组时实际上是指向一维数组的第一个变量的.

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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