考虑以下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
前两次调用的结果。
我需要解释以下三个电话的结果。
答案 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)
您可以使用(&&)逻辑和运算符。因此会发生错误。