p = * a [0]和p =& a [0]之间有什么区别

时间:2015-05-22 06:09:34

标签: c arrays pointers

#define N 20
int a[2N], i, *p, sum;

p = a;


/* p=a is equivalent to p = *a[0];
• p is assigned 300.
• Pointer arithmetic provides an alternative to array indexing.
• p=a; is equivalent to p=&a[=]; (p is assigned 300)

我不知道p=*a[0]p=&a[0]是一样的? *a[0]引用内存地址处的元素。

3 个答案:

答案 0 :(得分:5)

第1点

您理解,此处$('.table tbody').append('<tr><td contenteditable="true">1</td><td contenteditable="true">1</td><td contenteditable="true">1</td><td contenteditable="true"><span class="glyphicon glyphicon-trash form-control row-remover">del</span></td></tr>'); $('.table').on('keydown', 'td:last-child', function (e) { var keyCode = e.keyCode || e.which; if (keyCode == 9) { $('tbody').append('<tr><td contenteditable="true">2</td><td contenteditable="true">2</td><td contenteditable="true">2</td><td contenteditable="true"><span class="glyphicon glyphicon-trash form-control row-remover">del</span></td></tr>'); } }); $('span.glyphicon-trash').on('click', function () { $(this).closest('tr').remove(); }); 无效代码?

int a[2N]并不代表2N,而是2*N被视为后缀(对于整数文字N)无效

感谢 @LưuVĩnhPhúc先生的评论。

如果您想要2之类的内容,请写下int a[40]

第2点

  

int a [2*N]p=*a[0]相同

不,他们不一样。实际上,使用当前的代码段,p=&a[0] 无效

FWIW,*a[0]p = a;相同,因为数组名称代表基地址,即第一个元素的地址在阵列中。

答案 1 :(得分:1)

p = ap = &a[0]确实相同。在这种情况下,您将数组中第一个元素的地址分配给p(因为数组的名称=指向其第一个元素的指针)。 p=*a[0]p=&a[0]不一样; *a[0]要求a指针数组,并取消引用其第一个成员。

答案 2 :(得分:0)

p = &a[0]的含义如下

例如:

 int a[4];
                        a[0]  a[1]  a[2]  a[3]
            a --------> [   ][    ][    ][    ]

<强>当量

 // Reference
 &a[0] = a;
 &a[1] = a+1; 
 ...
 &a[3] = a+3;

 // Value
 a[0]  = *a
 a[1]  = *(a+1)
 ..
 a[3]  = *(a+3)

在C编程数组中,数组的名称始终指向数组的第一个元素。这里,数组的第一个元素的地址是&a[0]。此外,a表示指向它的指针的地址,即基地址。因此,&a[0]相当于a,因此p = ap = &a[0]都相同。

相关问题