c++ - C++ 函数返回问题
问题描述
我正在尝试制作一个可以返回可以是不同数据类型的数组大小的函数。我相信表达式 (sizeof(z)/sizeof(*z))) 返回分配给 z 的内存除以数据类型的内存大小。下面的代码是我尝试重载函数并将数组的大小作为整数返回。当我在主函数中运行表达式时它可以工作,但是当我尝试将数组传递给函数时,我没有得到正确的值并且不确定我做错了什么。68 / 4 = 17 这是数组的正确大小。
(1) 在size函数中输出sizeof(z)和sizeof(*z)
(2) main函数中的表达式
(3)在main函数中输出sizeof(z)
(4)在main函数中输出sizeof(*z)
#include <iostream>
using namespace std;
//
int size(int *data){
cout << sizeof(data) << ", " << sizeof(*data) << ", ";
return((sizeof(data))/(sizeof(*data)));
}
int size(char *x){return(sizeof(x)/sizeof(*x));}
int size(float *x){return(sizeof(x)/sizeof(*x));}
int size(double *x){return(sizeof(x)/sizeof(*x));}
int size(short int *x){return(sizeof(x)/sizeof(*x));}
int size(long int *x){return(sizeof(x)/sizeof(*x));}
int main(){
double x[9];
int z[17];
char k[29];
cout << "(1) Size : " << size(z) << endl;
cout << "(2) Size : " << (sizeof(z)/sizeof(*z)) << endl;
cout << "(3) Size : " << sizeof(z) << endl;
cout << "(4) Size : " << sizeof(*z) << endl;
cout << "(5) Size : " << size(z) << endl;
cout << "(6) Size : " << size(k) << endl;
return 0;
}
终端输出:
(1) Size : 8, 4, 2
(2) Size : 17
(3) Size : 68
(4) Size : 4
(5) Size : 8, 4, 2
(6) Size : 8
解决方案
有一个常见的错误:
char* a // is a pointer
char b[] // is an array
使用时:
char b[5]; // is an array of 5 bytes
sizeof(b); // 5
// but
char* a = b;
sizeof(a); // 8 (x64)
最后sizeof(a)
是给你 sizeofchar *
这是一个指针。
您可以将数组的名称作为指针传递给size()
函数,但在该函数中,参数被视为指针。
推荐阅读
- html - CSS 为什么 div 会重叠?
- c++ - 如何注册计划任务以便为现有用户执行任务
- android - 我可以在我的安卓手机中使用霍尼韦尔安卓应用程序进行测试吗
- python - 参数作为我在 Python 3 中的预期列表
- php - PHP $_SERVER 变量来识别请求的文件
- ios - 领域平台数据未使用 Storyboard-Swift 4 加载到 TableView 中
- reactjs - 从 react js 传递天气和当前位置的信息
- c# - 如何在 Exression.Constant 中检查 null 和空字符串?
- html - 如何通过简单的 css 自定义日期选择器?
- reactjs - 与 React 一起使用时 Apollo 重新获取