sizeof(数组名)和sizeof(指针)的区别

「爱情、让人受尽委屈。」 2022-06-12 11:28 276阅读 0赞

在c/c++中我们一般都用 sizeof(数组名)/sizeof(数组元素类型) 来计算数组的长度,其中 sizeof(数组名) 计算的是数组占用的存储大小。同时,一般我们认为数组名和指针就是一回事,最近写程序时将数组名作为指针形参传入函数,想在函数中用 sizeof(指针形参)/sizeof(数组元素类型) 来计算数组长度时却出了错,最后发现原来是sizeof(数组名)和sizeof(指针)的区别导致的,于是写了段代码测试了一下:

  1. #include<iostream>
  2. void fun(int *E)
  3. {
  4. std::cout<<"函数指针形参:"<<sizeof(E)<<std::endl;
  5. }
  6. int main()
  7. {
  8. int A[10];
  9. int *B = new int[10];
  10. //int *&C = A //会报错
  11. int *&D = B;
  12. std::cout<<"数组名:"<<sizeof(A)<<std::endl;
  13. std::cout<<"指针:"<<sizeof(B)<<std::endl;
  14. std::cout<<"指针引用:"<<sizeof(D)<<std::endl;
  15. fun(A);
  16. }

输出结果:

数组名:40
指针:8
指针引用:8
函数指针形参:8

可以看到,当sizeof的参数是数组名时,计算的是整个数组的存储大小;当sizeof的参数是指针时,计算的是指针的大小(8字节,64位系统)。而且,可以定义对指针的引用,但却不能用数组名来作为指针引用的右值,可见数组名和指针还是有区别的。同时,将数组名作为实参传入函数时,因为形参是指针,所以在函数体内的其实是通过数组名初始化的指针形参,故不能在函数中通过 sizeof(指针形参)/sizeof(数组元素类型) 来计算数组长度。所以一般将数组名作为形参传入函数时,也会同时传递一个数组长度的参数。

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读

    相关 strlensizeof区别

    1、sizeof是运算符,在头文件中typedef为unsigned int类型的。 2、它的值在编译的时候就计算好了。它的参数可以使数据类型、指针、数组、对象、函数等。