关于指针和数组的问题

Gzd2003 2008-12-16 03:39:22
存在以下程序,其中for( p=&a[0][0], i=0; i<=6; i++, p++)改成for( p=a, i=0; i<=6; i++, p++)为什么会编译出错?编译错误信息如下:
--------------------Configuration: Test - Win32 Debug--------------------
Compiling...
CopyTest.cpp
D:\Test\CopyTest.cpp(20) : error C2440: '=' : cannot convert from 'class test [2][3]' to 'class test *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
Creating browse info file...

Test.exe - 1 error(s), 0 warning(s)

p=&a[0][0]不就是在将p指向a数组的第一个元素吗?p=a怎么就不可以呢?谢谢。

#include < iostream >
using namespace std;
class test
{
int X;
public :
test(int a)
{
X = a;
}
int GetX()
{
return X;
}
};
void main()
{
int i;
test *p, a[2][3] = {{1, 2, 3}, {4, 5, 6}};
//for( p=a, i=0; i<=6; i++, p++)为什么会编译出错?
for( p=&a[0][0], i=0; i<=6; i++, p++)
{
if((p-a[0])%3 == 0)
cout<< endl;
cout<< p->GetX() <<" ";
}
}
...全文
141 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
潇离 2008-12-16
  • 打赏
  • 举报
回复
指针类型不同
speeder53 2008-12-16
  • 打赏
  • 举报
回复
mk
xuegao007 2008-12-16
  • 打赏
  • 举报
回复
指针类型不同,但a不是test**类型的,而是(*)[3]类型的.
SearchLife 2008-12-16
  • 打赏
  • 举报
回复
p=&a[0][0]不就是在将p指向a数组的第一个元素吗?p=a怎么就不可以呢?谢谢。

------------

test *p 是一个指向test的指针
test a[2][3] 是一个test类型的一维数组的数组。所以a表示的是一个一维数组的指针。

而&a[0][0] 则表示是一个test类型的地址,可以和p匹配。


如果test a[2][3] 改为test[2]则也是可以的,此时的test就可以和p匹配.


nullah 2008-12-16
  • 打赏
  • 举报
回复
up
lann64 2008-12-16
  • 打赏
  • 举报
回复
p=&a[0][0]不就是在将p指向a数组的第一个元素吗?p=a怎么就不可以呢?谢谢。
地址相同,但类型不同。就算可以,那以后p++时,也会出错。
Mougou 2008-12-16
  • 打赏
  • 举报
回复
一维数组即指针,二维数组的类型是指向每行第一个元素的指针,包含行元素个数信息的,不能直接当普通的指针用
lbh2001 2008-12-16
  • 打赏
  • 举报
回复
p的类型是test*
a的类型是test**
虽然指向相同的地址,但类型是不一样的
不可等同视之

65,211

社区成员

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

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