| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3557 人关注过本帖
标题:二维数组元素如何用指针表示
只看楼主 加入收藏
xingshujun
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-1-17
收藏
 问题点数:0 回复次数:3 
二维数组元素如何用指针表示

程序一:
#include <iostream>
using namespace std;
int main()
{
int a [8]={212,456, 32, 16,};
cout<<a[0]<<endl;
int *b;
b=a;
cout<<b<<endl;
return 0;
}
输出结果:212
0012FF60
程序二:
#include <iostream>
using namespace std;
int main()
{
int a [3][8]={212,456, 32, 16,};
cout<<a[0][0]<<endl;

cout<<a<<endl;
return 0;
}
输出结果为:
212
0012FF60,说明程序2中的a是一内存地址可赋值给一指针
但下面的程序为什么会出错呢

#include <iostream>
using namespace std;
int main()
{
int a [3][8]={212,456, 32, 16,};
cout<<a[0][0]<<endl;
int *b;
b=a;
cout<<b<<endl;
return 0;
}
错误提示为:
error C2440: '=' : cannot convert from 'int [3][8]' to 'int *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.



程序四:
#include <iostream>
using namespace std;
int main()
{
int a [3][8]={212,456, 32, 16,};
cout<<a[0][0]<<endl;
int *b;
b=a[0];
cout<<b<<endl;
return 0;
}
输出结果:
212
0012FF20

为什么在把b=a改为b=a[0]就有结果输出,而b的值又是谁的内存地址呢;



我想知道二维数组元素如何用指针表示;哪位高手帮一帮我这个初学者.

搜索更多相关主题的帖子: 指针 元素 
2006-01-21 18:46
love_me
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2005-12-29
收藏
得分:0 
以下是引用xingshujun在2006-1-21 18:46:00的发言:

程序一:
#include <iostream>
using namespace std;
int main()
{
int a [8]={212,456, 32, 16,};
cout<<a[0]<<endl;
int *b;
b=a;
cout<<b<<endl;
return 0;
}
输出结果:212
0012FF60
程序二:
#include <iostream>
using namespace std;
int main()
{
int a [3][8]={212,456, 32, 16,};
cout<<a[0][0]<<endl;

cout<<a<<endl;
return 0;
}
输出结果为:
212
0012FF60,说明程序2中的a是一内存地址可赋值给一指针
但下面的程序为什么会出错呢

#include <iostream>
using namespace std;
int main()
{
int a [3][8]={212,456, 32, 16,};
cout<<a[0][0]<<endl;
int *b;
b=a;
cout<<b<<endl;
return 0;
}
错误提示为:
error C2440: '=' : cannot convert from 'int [3][8]' to 'int *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.



程序四:
#include <iostream>
using namespace std;
int main()
{
int a [3][8]={212,456, 32, 16,};
cout<<a[0][0]<<endl;
int *b;
b=a[0];
cout<<b<<endl;
return 0;
}
输出结果:
212
0012FF20

为什么在把b=a改为b=a[0]就有结果输出,而b的值又是谁的内存地址呢;



我想知道二维数组元素如何用指针表示;哪位高手帮一帮我这个初学者.

你可以理解为你定义的是数组的数组~

例如int A, B, C, D

我可以申明一个数组为 int i[4]={A, B, C, D};

如果还存在2个数组 int j[4]={1, 2, 3, 4}; int k[4]={55, 66, 77, 88}

我可以申明一个数组为int [3][4]={{ i }, { j }, { k }}

其中有3个数组,你的指针指向哪一个?


灌水无罪! 顶贴有理! <0_0>
2006-01-21 20:16
love_me
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2005-12-29
收藏
得分:0 

Visual C++ 概念:生成 C/C++ 程序

编译器错误 C2440“conversion”: 无法从“type1”转换为“type2”
编译器无法从“type1”转换为“type2”。
将用“UDT 返回值的不兼容调用约定”消息限定此示例代码 15 和 16 行的 C2440 错误。(UDT 指用户定义的类型,如类、结构或联合。)在前向声明的返回类型中指定的 UDT 调用约定与该 UDT 的实际调用约定有冲突,而且涉及函数指针时,会导致上述类型的不兼容错误。
在该示例中,我们首先拥有某结构和返回该结构的函数的前向声明;编译器假定该结构使用 C++ 调用约定。然后我们生成该结构的定义,默认情况下,该结构定义使用 C 调用约定。因为编译器在读完整个结构前,不知道该结构的调用约定,所以也假定在 get_c2 的返回类型中该结构的调用约定为 C++。
该结构后面跟有另一个返回该结构的函数声明,但在此时,编译器知道该结构的调用约定为 C++。同样,返回该结构的函数指针在结构定义之后定义,所以编译器知道该结构使用 C++ 调用约定。
因为将应使用 C 调用约定返回类型的函数指针赋予了应使用 C++ 调用约定返回类型的函数,所以发生错误。
若要解决由于不兼容的调用约定而产生的 C2440,请在 UDT 定义之后声明返回 UDT 的函数。
// C2440.cpp
struct MyStruct;

MyStruct get_c1();

struct MyStruct
{
int i;
static MyStruct get_C2();
};

MyStruct get_C3();

typedef MyStruct (*FC)();

FC fc1 = &get_c1; // C2440, line 15
FC fc2 = &MyStruct::get_C2; // C2440, line 16
FC fc3 = &get_C3;

class CMyClass {
public:
explicit CMyClass( int iBar)
throw() {
}

static CMyClass get_c2();
};

int main() {

CMyClass myclass = 2; // C2440
// try one of the following
// CMyClass myclass(2);
// CMyClass myclass = (CMyClass)2;

int *i;
float j;
j = (float)i; // C2440, cannot cast from pointer to int to float
}


灌水无罪! 顶贴有理! <0_0>
2006-01-21 20:21
xingshujun
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-1-17
收藏
得分:0 

经love_me的提示我有点明白了,以下面的例子说明吧

#include <iostream>
using namespace std;
int main()
{
int t[3][4]=
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};

int *b;
b=t[0];
cout<<*b;


return 0;
}
输出结果为"1";

t[0]为元素"1"的地址
t[1]为元素"5"的地址
t[2]为元素"9"的地址

若指针要指向元素"3",则b=b[0]+2;
若指针要指向元素"11",则b=t[2]+2;


至于那个编译器错误,我没有看懂,因为我还没有学到结构和类,不过我会努力往下学,弄清错误的原因

谢谢love_me

[此贴子已经被作者于2006-1-21 21:16:23编辑过]


因为喜欢一个人,走上一条不归路.热情需要燃烧.
2006-01-21 21:15
快速回复:二维数组元素如何用指针表示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021824 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved