经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
聊聊c++数组名称和sizeof的问题
来源:jb51  时间:2022/1/24 10:09:39  对本文有异议

一维数组名称的用途:

可以统计整个数组在内存中的长度

可以获取数组在内存中的首地址

示例:

  1. int main() {
  2.  
  3. //数组名用途
  4. //1、可以获取整个数组占用内存空间大小
  5. int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  6. cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;
  7. cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;
  8. cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;
  9. //2、可以通过数组名获取到数组首地址
  10. cout << "数组首地址为: " << (int)arr << endl;
  11. cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl;
  12. cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl;
  13. //arr = 100; 错误,数组名是常量,因此不可以赋值
  14. system("pause");
  15. return 0;
  16. }

二维数组数组名

  • 查看二维数组所占内存空间
  • 获取二维数组首地址

示例:

  1. int main() {
  2.  
  3. //二维数组数组名
  4. int arr[2][3] =
  5. {
  6. {1,2,3},
  7. {4,5,6}
  8. };
  9. cout << "二维数组大小: " << sizeof(arr) << endl;
  10. cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;
  11. cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;
  12. cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;
  13. cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
  14. //地址
  15. cout << "二维数组首地址:" << arr << endl;
  16. cout << "二维数组第一行地址:" << arr[0] << endl;
  17. cout << "二维数组第二行地址:" << arr[1] << endl;
  18. cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
  19. cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
  20. system("pause");
  21. return 0;
  22. }

 补充:C++/C中 sizeof(指针)和sizeof(数组名)的区别

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<class T>
  5. int length(T& data)
  6. {undefined
  7. return sizeof(data)/sizeof(data[0]);
  8. }
  9. int main(){undefined
  10. int data[]={2,45,7,8,9,23,4,6,7,8,0};
  11. int data1[12];
  12. int *data2 = new int[13];
  13. char *data3 = new char[10];
  14. cout<<length(data)<<" "<<sizeof(data[0])<<" "<<sizeof(data)<<endl;
  15. cout<<length(data1)<<" "<<sizeof(data1[0])<<" "<<sizeof(data1)<<endl;
  16. cout<<length(data2)<<" "<<sizeof(data2[0])<<" "<<sizeof(data2)<<endl;
  17. cout<<length(data3)<<" "<<sizeof(data3[0])<<" "<<sizeof(data3)<<endl;
  18. return 0;

运行结果截图可知:

sizeof()参数为数组名和指针变量的不同,sizeof(data)=44 此处为确为数组长度。
sizeof(data2)=4此处与sizeof(data2[0])相同,但是意义却不同。
sizeof(data2)=4得到的结果永远是指针变量本身的大小,此处是一个指针变量,指针变量永远为32位4字节,只要是指针,大小就是4(64位机上要变成8也不一定);当声明动态数组时一定要小心。
sizeof(data2[0])=4指针变量指向的空间的大小,此处为数组空间为int类型,类似于sizeof(int)=4,而sizeof(data3[0])=1,就类似于sizeof(char)=1。

提到了sizeof,那什么是sizeof?

首先看一下sizeof在msdn上的定义:
  The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
  看到return这个字眼,是不是想到了函数?错了,sizeof不是一个函数,你见过给一个函数传参数,而不加括号的吗?sizeof可以,所以sizeof不是函数。网上有人说sizeof是一元操作符,但是我并不这么认为,因为sizeof更像一个特殊的宏,它是在编译阶段求值的。
  结论:不要把sizeof当成函数,也不要看作一元操作符,把他当成一个特殊的编译预处理。

小尾巴~~~~~~~~~~~~     

       为什么要写sizeof()呢?起初是想写写排序算法,想把数组当作参数传入,然后用length算出数组长度,但是失败了,查阅资料后发现,大部分的函数如果想要传参数组,需要多传一个参数即数组长度。用上边length的方法行不通,只是传入了一个指针而已。

到此这篇关于c++数组名称和sizeof的文章就介绍到这了,更多相关c++ sizeof 数组名称内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号