我了解到我们可以将索引i处的数组元素的地址用作&A[i]
或简单地用作A+i
并获得价值
A[i]
或*(A+i)
其中A
是数组,i
表示索引。
让我们说int A[]={1,2,3};
当我使用sizeof(*A)
时,我得到了值4
,现在当我使用sizeof(A)
时,我必须得到第一个元素address value
的大小,为什么我得到的大小为12
整个数组为onTick()
。
我是初学者,很困惑,请指导。
答案 0 :(得分:2)
int A[]={1,2,3};
A
是array
和array is not a pointer
。当您打印sizeof(*A)
时,它会打印4
,因为*A
表示数组的第一个元素,其大小为4
。
sizeof(A)
结果不会产生4
,因为A
不是pointer
。 A
是array
,array
表示元素集合,每个元素需要4
个字节。
A[i] == *(A+i)
sizeof(A[i]) => 4
因为A[0]
是一个整数sizeof(*A) => 4
因为*A
表示起始地址的值,需要4个字节才能存储sizeof(A) => 12 bytes
,而非4,因为A不是指针。sizeof(&A[0]) => 4 bytes
因为&A[0]
产生的地址和任何地址的大小都是4
字节。答案 1 :(得分:0)
当你打电话给sizeof(A)
时,你会得到数组的大小,因为n.m说。但是如果你这样初始化你的数组:
int *A = new int[3];
A[0] = 1;
A[1] = 2;
A[2] = 3;
cout << sizeof(A) << endl;
你会得到4。
答案 2 :(得分:0)
当我使用sizeof(* A)时,我得到值4
这只是数组中第一个元素的大小,即sizeof(*A)
与sizeof(*(&A[0]))
相同。
现在当我使用sizeof(A)时,我必须得到第一个元素的地址值的大小,为什么我得到整个数组的大小为12
您已将A
声明为
int A[]={1,2,3};
现在,问问自己一个简单的问题 - What is A
?永远不要满足Array
以外的任何答案。简而言之,您将以字节为单位获得整个数组的大小。这里有3个元素,每个元素占4个字节。
<强>加强>
我必须得到地址值的大小
那应该是sizeof(&A)
- 这是A的地址大小 - 在许多系统中通常是8个字节。