数组名称的值是数组(第0个元素)的起始地址;因此,&没有必要。
前:
scanf("%s", string1);
那么我们必须使用的整数或字符变量名的值是多少?运营商?我希望不是像数组名这样的地址。这些是什么?这很令人困惑。
前:
scanf("%d", &number1);
number1究竟是什么?它也是一个地址吗?
答案 0 :(得分:4)
数组名称的值是(第0个元素)数组
的起始地址
不,不是。只是在某些条件下(例如,传递给函数或分配给指针时)数组可以衰减成指向其第一个元素的指针。
因此,&没有必要。 !!!!!!!
也不需要写7个感叹号。请注意,如果arr
是一个数组,则arr
和&arr
根本不相同(正如您所假设的那样)。 arr
的类型为T [N]
,其中T是数组中元素的类型,N
是元素的数量。但是,&arr
的类型是“T类型的N个项目的指向数组的指针”(T (*)[N]
)。这种差异很重要(不仅如此),因为指针算法会在指向T的指针和指向数组的指针上产生不同的结果。
那么我们必须使用的整数或字符变量名的值是多少?运营商?我希望不是像数组名这样的地址。
不,不像数组(因为它们不是数组),但&
仍然是 addressof
运算符。如果&variable
的类型为variable
,则T *
会指向variable
,其类型为T
。
在这种特定情况下,您声称number1
是int
,因此&number1
是int *
类型的表达。
答案 1 :(得分:1)
究竟是什么number1
?它也是一个地址吗?
根据您的类型修饰符,number1
可能是int
,但我们当然不知道这一点,因为您没有告诉我们。如果我正确理解了您的问题,number1
是一个整数,&number1
是指向该整数的指针。
那么整数或字符变量名的值是什么?
未修改的变量名称的值是该变量的值。正如您所指出的,数组是一种特殊情况。数组名称实际上不是变量。给出:
int a[10];
int *pa;
你可以合法地做到这一点:
pa = a;
但不是这样:
a = pa;
a
是数组的名称,而不是变量。
更新:对于那些认为阵列名称不是变量的人来说很奇怪,我实际上引用了第二版 The C Programming Language by Kernighan和Ritchie。 (Ritchie是C的创造者。)现在我将直接引用它们,从第二版的第99页开始:
指针是变量,因此
pa=a
和pa++
是合法的。但是数组名称不是变量;像a=pa
和a++
这样的结构是非法的。
答案 2 :(得分:1)
哦,我确实有很多东西可以学习C.但也许这种混淆主要是关于阵列&指针。对于实际目的,数组变量只是一个指针。实际上,它不是 - 它的类型确实是一个数组,但它被隐式转换为它是一个数组类型的指针。我希望有所帮助。
答案 3 :(得分:1)
请参阅,如果您声明它:
int number1;
然后&number1
基本上是存储number1内容的位置。
所以,当你写:
scanf("%d"&number1);
编译器将您输入的任何数字存储到&number1
指定的位置。所以,'& 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存入其中。
答案 4 :(得分: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);
期望地址(s)放置变量的位置,如果你做了
number1=1234;
scanf("%d", number1);
scanf函数将获得它为%d解析的任何数字,并尝试将其填充到内存位置1234,这不是您通常想要的。