0

考虑以下 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

4 回答 4

3

这是因为C数组名称和数组地址是等价的。所以当你通过&array1时就相当于通过了array

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

printf("%u %u\n", array1, &array1); 
于 2013-10-01T14:31:14.857 回答
2

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

于 2013-10-01T14:46:49.037 回答
0

You send the base address of the array.

(1)viewDataPointedToBy(array1)

or

viewDataPointedToBy(&array1)

in both function you send the base address of array1

therefore the result of both function are same.

(2) in the case : viewDataPointedToBy(&&array1)

you can use (&&)logical and operator. Therefore error will occur.

于 2013-10-01T14:37:39.463 回答
0

array itslef 是一个指针,并且是您请求的地址地址。对于给定的数组,它是不可接受的。

于 2013-10-01T14:33:49.817 回答