您的位置:首页 > 编程语言 > C语言/C++

c语言数组与指针的学习与思考

2016-05-18 20:09 246 查看
注:不知具体原因,在我的机器上地址的位数是48,占用了8个字节,在这个已知条件下进行分析。

1.double c[3][6] 直接声明的二维数组

是一块连续的内存空间,大小3×6×8 = 144字节;

double c[3][6];
cout<<(void*)c<<endl;
cout<<c<<endl;
cout<<c[0]<<endl;
cout<<&c[0][0]<<endl;
cout<<&c[0][1]<<endl;
cout<<&c[0][5]<<endl<<endl;

cout<<c[1]<<endl;
cout<<&c[1][0]<<endl;

cout<<"size:"<<endl;
cout<<sizeof(c)<<endl;//数组的最开始
cout<<sizeof(*c)<<endl;//相当于c[0] 表示一维的数组
cout<<sizeof(**c)<<endl;//相当于c[0][0]指向一个具体的元素
//再多层数的指针就没有具体意义了

输出如下:

0x7ffde665ca80
0x7ffde665ca80
0x7ffde665ca80
0x7ffde665ca80
0x7ffde665ca88
0x7ffde665caa8

0x7ffde665cab0
0x7ffde665cab0
size:
144
48
8

2.   double* c[3][6];存储指针的二维数组

double* c[3][6];
cout<<(void*)c<<endl;
cout<<c<<endl;
cout<<c[0]<<endl;
cout<<&c[0][0]<<endl;
cout<<&c[0][1]<<endl;
cout<<&c[0][5]<<endl<<endl;

cout<<c[1]<<endl;
cout<<&c[1][0]<<endl;

cout<<"size:"<<endl;
cout<<sizeof(c)<<endl;
cout<<sizeof(*c)<<endl;
cout<<sizeof(**c)<<endl;
cout<<sizeof(***c)<<endl;

输出如下:

0x7ffe2f1a66f0
0x7ffe2f1a66f0
0x7ffe2f1a66f0
0x7ffe2f1a66f0
0x7ffe2f1a66f8
0x7ffe2f1a6718

0x7ffe2f1a6720
0x7ffe2f1a6720
size:
144
48
8
8

可以看出与1中double类型的二维数组存储并无区别,只是一个存的是double类型的值,一个存的是指向double类型的指针,所以×××c还是有意义的;

3.   double (*c)[3][6];

cout<<"size:"<<endl;
cout<<sizeof(c)<<endl;
cout<<sizeof(*c)<<endl;
cout<<sizeof(**c)<<endl;
cout<<sizeof(***c)<<endl;

输出如下:

8
144
48
8

大小关系虽然明白了,可是却不明白这样定义的一个数组的内存结构是否和1,2完全一样,也不知如何对每个元素赋值。

4经典问题:    double* (*c)[3][6];

cout<<"size:"<<endl;
cout<<sizeof(c)<<endl;
cout<<sizeof(*c)<<endl;
cout<<sizeof(**c)<<endl;
cout<<sizeof(***c)<<endl;
cout<<sizeof(****c)<<endl;

输出如下:

size:
8
144
48
8
8

所以说只是例1和例2的区别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: