以下案例的价值是多少?

时间:2014-08-19 07:11:58

标签: c arrays pointers pointer-to-array

如果我定义一个数组arr[]并定义一个指向它的指针:

int *p=arr;

如果arr(就地址而言)的值为0x1234p的价值是多少?它会是一样的吗?

7 个答案:

答案 0 :(得分:3)

是。价值是一样的。 要检查这一点,请尝试

printf("arr=%p p=%p\n", arr, p);

答案 1 :(得分:0)

p的值与arr的值相同。

原因:数组的名称表示基址,您将其分配给指针p

答案 2 :(得分:0)

您可以使用printf函数或gdb调试器轻松检查变量值等内容。

以下是如何使用gdb解决您的问题:

gdb a.out //you must have compile with -g
b main.c:10 //place a breakpoint at the 10th line of main.c, in this case 10 is arbitrary it just need to be after your variable assignement
r //run
p &arr //print the address of arr
p p //print the value of p
p p == &arr //print 1 if p == &arr

答案 3 :(得分:0)

p的值将是相同的。 如果我们假设arr的值是 0x1234 ,则指针p将采用相同的值。这是因为指针p有足够的空间来保存arr数组的地址......

答案 4 :(得分:0)

int arr[] = {1, 2, 3, 4, 5, 6, 7};
int *p = arr;

arrp的值相同。

但价值只是变量的一部分。变量由值和类型组成。 arrp的类型不同。

您可能希望阅读comp.lang.c FAQ的第6部分。

答案 5 :(得分:0)

arr”的值不是地址。 arr是数组类型的变量,其“value”是一个数组,即int个元素的序列。 “值”仅在类型的上下文中有意义。

在需要指针类型的上下文中,可以将数组类型的表达式(例如arr)隐式转换为指针类型的rvalue表达式(值为数组的第一个元素的地址)。 int *p=arr;就是这样的背景。

答案 6 :(得分:-2)

数组名称是指向它的第一个元素的指针。例如:

int a[5];

然后,

  

是一个指向元素a [0]的int *。如果arr的值是

  

0×1234

p的值将是相同的。但要小心使用p访问数组(应该考虑数组范围)。

相关问题