我知道我不应该使用Dev-C++,但这是学校的必修课,所以我对此无能为力。
主题是C/C++中的指针,测量整数数组的长度时出现错误。请参见以下代码:
// POINTER
# include<iostream>
# include<string.h>
using namespace std;
int main(){
//neues Feld anlegen
int *a = new int[5];
a[0] = 12;
a[1] = 5;
a[2] = 43;
a[3] = -12;
a[4] = 100;
// Feld füllen
for(int i = 0; i<sizeof(a);i++){
cout<<a[i]<<"\n"<<endl;
}
cout<<sizeof(a);
system("pause");
return 0;
}sizeof()返回4而不是5...Any ideas?
发布于 2011-11-14 21:59:11
它不是一个bug,因为它返回的是a本身的大小(在32位构建中是int* -4字节类型),而不是数组的长度。
请注意-其他人说大小取决于操作系统,这是一半正确的。这真的取决于构建。sizeof是一种编译时构造。
发布于 2011-11-14 22:02:14
首先,你不应该认为一个“奇怪”行为的罪魁祸首是编译器:大多数时候这个bug是你的。
实际上,你的sizeof指令告诉你一个int*的大小,这是设计出来的,所以这不是编译器的错,而是你的误解。没有办法使用sizeof来判断动态分配的数组的大小。
发布于 2011-11-14 22:02:24
在本例中是一个指针,指针的大小取决于编译器。
您正在执行sizeof(int*)。实际上,您使用的是32位编译器,而您的编译器\系统指针是32位。
你不能从对象的指针获取分配new的对象的大小,sizeof是在编译时计算的,而不是在运行时计算的。
要获得数组的大小,您应该这样做:
int a[5]; // Array allocated in stack, we can use sizeof.
std::cout << (sizeof(a) / sizeof(int));sizeof返回以字节为单位的大小,而不是数组中元素的数量。
该代码等同于编写
std::cout << (sizeof(int[5]) / sizeof(int));https://stackoverflow.com/questions/8122637
复制相似问题