0

数组名的值是数组(第零个元素)的开始地址;因此, & 是不必要的。

前任:

scanf("%s", string1);

那么我们必须使用 & 运算符的整数或字符变量名称的值是多少?不是我希望的数组名称之类的地址。这些是什么?这令人困惑。

前任:

scanf("%d", &number1);  

number1 到底是什么?也是地址吗?

4

5 回答 5

4

数组名的值是数组(第零个元素)的开始地址

不,不是。只是数组可以在某些条件下衰减为指向其第一个元素的指针(例如,当传递给函数或分配给指针时)。

因此, & 是不必要的。!!!!!!

也不需要写 7 个感叹号。请注意, ifarr是一个数组, thenarr&arr根本不一样(正如您可能假设的那样)。arr是类型T [N],其中 T 是数组中元素的类型,并且N是元素的数量。然而,的类型&arr是“指向 T 类型的 N 个项的数组的指针”(T (*)[N])。这种差异很重要(不仅),因为指针算术将在指向 T 的指针和指向 T 数组的指针上产生不同的结果。

那么我们必须使用 & 运算符的整数或字符变量名称的值是多少?不是我希望的数组名称之类的地址。

不,不像数组(因为它们不是数组),但& 仍然是运算addressof符。&variable给出指向 的指针,如果variable类型是T *,则类型variableT

在这种特定情况下,您声称它number1是一个int,因此&number1是一个类型的表达式int *

于 2013-04-27T16:12:31.397 回答
1

究竟是number1什么?也是地址吗?

根据您的类型修饰符,number1大概是一个int,但我们当然不确定,因为您没有告诉我们。如果我正确理解您的要求,number1它是一个整数并且&number1是指向该整数的指针。

那么整数或字符变量名称的值是多少?

未修改的变量名的值就是该变量的值。正如您所指出的,数组是一种特殊情况。数组名称实际上不是变量。鉴于:

int a[10];
int *pa;

你可以合法地这样做:

pa = a;

但不是这个:

a = pa;

a是数组的名称,而不是变量。

更新:对于那些认为说数组名不是变量很奇怪的人,我实际上是在引用Kernighan 和 Ritchie的The C Programming Language第二版。(Ritchie 是 C 的创造者。)现在我将直接引用它们,来自第二版的第 99 页:

指针是一个变量,所以pa=apa++是合法的。但是数组名不是变量;类似的建筑a=paa++非法的。

于 2013-04-27T16:11:10.007 回答
1

哦,天哪,你确实有很多关于 C 的知识要学习。但也许混淆主要是关于数组和指针。出于实际目的,数组变量只是一个指针。实际上,它不是——它的类型确实是一个数组,但它被隐式转换为它是一个数组的类型的指针。我希望这会有所帮助。

于 2013-04-27T16:11:24.263 回答
1

看,如果你声明它像:

int number1;

然后&number1基本上就是存储 number1 内容的位置。

所以,当你写:

scanf("%d"&number1);

编译器将您输入的任何数字存储到&number1.So 指定的位置,'&number1' 在某种程度上是 number1 的内容将存储的地址。

下次您要使用 的内容时number1,它们将从 指定的内存位置拾取&number

我想提一下这个例子:

int a,b,c;
scanf("%d %d ",&a,&b);/*&a and &b are just locations assigned to a and b, in which we store integers*/
c=a+b;

在, c=a+b, 这里ab将表示您存储在分配给它们的内存位置中的整数,但c将表示分配给的内存位置c, 注意:前面没有&运算符c,我们只是&在函数中使用运算符,例如scanf输入/输出中定义的函数stdio.h

当你声明int number1;

number1 也可以代表一个地址,例如:当你写number1=4;在这里number1代表内存位置。因为您将 4 存储到其中。

于 2013-04-27T16:12:03.453 回答
1

如果你声明 number1 并给它一些值:

int number1;
number1 = 1234;

然后&number1是存储变量的内存位置的地址。如果您查看该内存位置,您会发现它包含 1234,即变量的值。

如果 array_of_numbers 声明为:

int array_of_numbers[100];

那么数组中的第一个数字是array_of_numbers[0],数组中第一个元素的地址是&array_of_numbers[0]

array_of_numbers与 完全一样&array_of_numbers[0]

期望的scanf("%d", &number1);地址(ES)放置变量(S),如果你这样做了

number1=1234;
scanf("%d", number1);

scanf 函数将获取它为 %d 解析的任何数字,并尝试将其填充到内存位置 1234,这不是您通常想要的。

于 2013-04-27T16:22:24.937 回答