#include <iostream>
using namespace std;
int main (void)
{
int * p = new int(40); // here `p` points to an array having space for 40 ints or space allocated is 40 bytes?
for (int i = 0; i < 2; i++)
cin>>p[i];
cout<<sizeof(p)<<"\n"; // here, the output should be size of array since p points to an array
int arr[5] = {1,2,3,4,5}; // since, here it will output 20 (space allocated for the entire array)
cout<<sizeof(arr)<<"\n";
return 0;
}
所以,我有两个问题(程序中的前两个评论)
此处p
指向一个空间为40个整数或分配空间为40个字节的数组?
这里,输出应该是数组的大小,因为p
指向一个数组,因为从技术上讲,arr
也是一个指针,当我们*arr
时,它引用了数组的第一个元素。
答案 0 :(得分:3)
在您的代码中,p
被定义为指针,因此sizeof(p)
与sizeof(int*)
相同,32位系统为4,64位系统为8。
在第二种情况下,arr
是一个静态数组,因此sizeof(arr)
与返回sizeof(int[5])
的{{1}}相同,假设没有填充或其他复杂的工作发生“引擎盖下”。
请注意,当您将数组名称作为参数传递给接受指针作为形式函数参数的函数时,数组会“衰减”到指针,因此在参数上调用5*sizeof(int)
会产生您可能的行为没想到。例如:
代码清单
sizeof
示例输出
#include <stdio.h>
void printSize(int* arg);
int main(void)
{
int *p;
int arr[10];
printf("sizeof p:%d\n", sizeof(p));
printf("sizeof arr:%d\n", sizeof(arr));
printSize(p);
printSize(arr);
return 0;
}
void printSize(int* arg)
{
printf("sizeof arg:%d\n", sizeof(arg));
}
答案 1 :(得分:3)
当您说server.com/images/1.jpg?wid=120
时,实际上是为单个整数分配空间并使用整数int *p = new int(40);
填充该空格。如果你想要一个40个整数的数组,你应该使用方括号:
40
所以,回答问题#1:两者都没有。分配的空间大小为系统上的一个int *p = new int[40];
。
回答问题#2:第一行输出是系统上单个指针的大小(因为int
只是一个指针)。这可能与p
的大小相同,可能是4个字节。第二行输出将是整数数组的总分配大小,因此它将是int
或40*sizeof(int)
。
答案 2 :(得分:1)
$string = convert_accented_characters($string);
的两种用途分别是查询类型sizeof
和int*
的大小。
(另外,您有一个错误并且意味着int[5]
,而不是new int[40]
,但这不会影响new int(40)
的结果