指向数组指针的指针

时间:2013-10-01 14:29:18

标签: c arrays pointers

考虑以下C代码:

char array1[1]={1};
char array2[2]={2, 2};

void viewDataPointedToBy(char* z)
{
  printf("%i\n", *z);
}

int main(void)
{
  viewDataPointedToBy(array1);   //prints 1, as expected.
  viewDataPointedToBy(array2);   //prints 2, as expected.

  viewDataPointedToBy(&array1);  //prints 1, How??
  viewDataPointedToBy(&array2);  //prints 2, How??

  viewDataPointedToBy(&&array1); //Compilation Error: 'array1' used but not defined, Why ?

  system ("pause");
  return 0;
}

我理解viewDataPointedToBy前两次调用的结果。 我需要解释以下三个电话的结果。

4 个答案:

答案 0 :(得分:3)

这是因为C数组名称和数组地址是等价的。因此,当您通过&array1时,它相当于传递array

您可以尝试打印地址以确认此行为:

printf("%u %u\n", array1, &array1); 

答案 1 :(得分:2)

至于你的上一个错误 - 我认为它是由语法问题引起的。你不能双重引用变量。它没有任何意义。 &数组是常量。再次引用它会让你无处可去。我假设错误来自编译器试图识别&&作为布尔二元运算符。

答案 2 :(得分:0)

数组本身是一个指针,以及您请求的地址。对于给定的数组,它是不可接受的。

答案 3 :(得分:0)

您发送阵列的基地址。

(1)viewDataPointedToBy(数组1)

viewDataPointedToBy(安培; ARRAY1)

在两个函数中发送array1的基址

因此,两种功能的结果都是一样的。

(2)在这种情况下:viewDataPointedToBy(&& array1)

您可以使用(&&)逻辑和运算符。因此会发生错误。