注册 登录
编程论坛 C++教室

小弟初学,再来请教个问题。

kybo04 发布于 2009-11-18 23:54, 428 次点击
#include "stdafx.h"
using namespace std;

int main(int argc, char* argv[]){
    int a[2][3]={{0,1,2},{3,4,5}};
        cout<<&a<<endl;
        cout<<a<<endl;
        cout<<*a<<endl;
        
        cout<<endl;

    int b[3]={3,4,5};
        cout<<&b<<endl;
        cout<<b<<endl;
        cout<<*b<<endl;
            
    return 0;
}
运行结果:
0012FF30
0012FF30
0012FF30

0012FF24
0012FF24
3

小弟的疑问是,为什么二维数组里面,用cout<<*a输出的头个元素的地址,而一维元素用cout<<*b,输出的确是头个元素的值呢?

这是为什么,有什么不一样吗?
3 回复
#2
kybo042009-11-19 10:33
额··没人知道吗?
#3
无诲今生2009-11-19 11:23
在二维数组里,a是一个地址,*a仍然是一个地址,**a才是二维数组里的第一个数值。而在一维数组里,a是第一个地址,*a才是第一个数值
#4
quietstar2009-11-19 14:47
在二维数组里面,&a,a,*a,a[0]的值都是一样的,都是指向二维数组的地址。因为可以将a[2][3]这个二维数组看成是2个1维数组,即a[0]、a[1]存储的都是指针类型,a[0]=&a[0][0],a[1]=&a[0][0],*a运算获得的就是a[0]的地址,即&a[0][0]。而在一维数组b[3]里面,b存储的就是首元素的地址,因此*b操作返回b[0],即一维数组b[3]的第一个元素的值(不是地址!)。
1