数组名的值是数组(第零个元素)的开始地址;因此, & 是不必要的。
前任:
scanf("%s", string1);
那么我们必须使用 & 运算符的整数或字符变量名称的值是多少?不是我希望的数组名称之类的地址。这些是什么?这令人困惑。
前任:
scanf("%d", &number1);
number1 到底是什么?也是地址吗?
数组名的值是数组(第零个元素)的开始地址;因此, & 是不必要的。
前任:
scanf("%s", string1);
那么我们必须使用 & 运算符的整数或字符变量名称的值是多少?不是我希望的数组名称之类的地址。这些是什么?这令人困惑。
前任:
scanf("%d", &number1);
number1 到底是什么?也是地址吗?
数组名的值是数组(第零个元素)的开始地址
不,不是。只是数组可以在某些条件下衰减为指向其第一个元素的指针(例如,当传递给函数或分配给指针时)。
因此, & 是不必要的。!!!!!!
也不需要写 7 个感叹号。请注意, ifarr
是一个数组, thenarr
和&arr
根本不一样(正如您可能假设的那样)。arr
是类型T [N]
,其中 T 是数组中元素的类型,并且N
是元素的数量。然而,的类型&arr
是“指向 T 类型的 N 个项的数组的指针”(T (*)[N]
)。这种差异很重要(不仅),因为指针算术将在指向 T 的指针和指向 T 数组的指针上产生不同的结果。
那么我们必须使用 & 运算符的整数或字符变量名称的值是多少?不是我希望的数组名称之类的地址。
不,不像数组(因为它们不是数组),但&
仍然是运算addressof
符。&variable
给出指向 的指针,如果variable
类型是T *
,则类型variable
是T
。
在这种特定情况下,您声称它number1
是一个int
,因此&number1
是一个类型的表达式int *
。
究竟是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=a
和pa++
是合法的。但是数组名不是变量;类似的建筑a=pa
是a++
非法的。
哦,天哪,你确实有很多关于 C 的知识要学习。但也许混淆主要是关于数组和指针。出于实际目的,数组变量只是一个指针。实际上,它不是——它的类型确实是一个数组,但它被隐式转换为它是一个数组的类型的指针。我希望这会有所帮助。
看,如果你声明它像:
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
, 这里a
和b
将表示您存储在分配给它们的内存位置中的整数,但c
将表示分配给的内存位置c
, 注意:前面没有&
运算符c
,我们只是&
在函数中使用运算符,例如scanf
输入/输出中定义的函数stdio.h
。
当你声明int number1;
number1 也可以代表一个地址,例如:当你写number1=4;
在这里number1
代表内存位置。因为您将 4 存储到其中。
如果你声明 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,这不是您通常想要的。