数组,指针和Sizeof关系

时间:2018-01-28 17:11:43

标签: c arrays pointers

我了解到我们可以将索引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()。 我是初学者,很困惑,请指导。

3 个答案:

答案 0 :(得分:2)

int A[]={1,2,3};

Aarrayarray is not a pointer。当您打印sizeof(*A)时,它会打印4,因为*A表示数组的第一个元素,其大小为4

sizeof(A)结果不会产生4,因为A不是pointerAarrayarray表示元素集合,每个元素需要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个字节。