首页 > 解决方案 > 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

标签: c++functionreturnoverloading

解决方案


有一个常见的错误:

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()函数,但在该函数中,参数被视为指针。


推荐阅读