可能重复:
作为参数传递的Sizeof数组
我想知道为什么以下代码的输出是1和9.这是因为函数大小中未声明的数组?如何将"数组大小"分离为函数?
#include "stdafx.h"
#include <iostream>
using namespace std;
int size(int a[])
{
return sizeof a/sizeof a[0];
}
int main()
{
int a[] = {5,2,4,7,1,8,9,10,6};
cout << size(a) << endl;
cout << sizeof a/sizeof a[0] << endl;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*oun 11
当你写的size(a)时候,你传递的是指针,而不是数组.由于指针的大小和int被4或8(取决于ABI),将得到sizeof(int *)/sizeof int(4/4 = 1为32位机器和8/4 = 2 64位的),其为1或2.
在C++中,当一个数组作为参数传递给一个函数时,实际上你正在传递一个指向数组的指针.
Maroun85答案是对的.这不是很明显,但a在int size(int a[])是一个指针.
但是你为什么不用c ++方式呢.用std::vectors
std::vector<int> a = {5,2,4,7,1,8,9,10,6};
cout << a.size() << endl;
Run Code Online (Sandbox Code Playgroud)
这里没有招数
- 编辑
如果您的编译器不支持c ++ 11.你可以做:
std::vector<int> a;
a.push(5);
a.push(2);
...
cout << a.size() << endl;
Run Code Online (Sandbox Code Playgroud)
您的size()函数无法像您希望的那样工作,因为当您将数组传递给函数时,数组会衰减到指向其第一个元素的指针.你a衰变到int*一个指针,sizeof操作符返回指针的大小,而不是数组.考虑使用std::vector<int>替代,因为这将允许您在每次将其传递给函数时检索向量的大小.
将数组传递给函数时,它们会衰减为指针。所以,你的size()功能相当于:
int size(int* a)
{
return sizeof a/sizeof a[0];
}
Run Code Online (Sandbox Code Playgroud)
Andsizeof a是指针的大小,与这里的 int 大小相同,因此是输出。
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |