C中的变量名到底是什么?

时间:2013-04-27 16:06:44

标签: c

数组名称的值是数组(第0个元素)的起始地址;因此,&没有必要。

前:

scanf("%s", string1);

那么我们必须使用的整数或字符变量名的值是多少?运营商?我希望不是像数组名这样的地址。这些是什么?这很令人困惑。

前:

scanf("%d", &number1);  

number1究竟是什么?它也是一个地址吗?

5 个答案:

答案 0 :(得分:4)

  

数组名称的值是(第0个元素)数组

的起始地址

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

  因此,&没有必要。 !!!!!!!

也不需要写7个感叹号。请注意,如果arr是一个数组,则arr&arr 根本不相同(正如您所假设的那样)。 arr的类型为T [N],其中T是数组中元素的类型,N是元素的数量。但是,&arr的类型是“T类型的N个项目的指向数组的指针”(T (*)[N])。这种差异很重要(不仅如此),因为指针算法会在指向T的指针和指向数组的指针上产生不同的结果。

  

那么我们必须使用的整数或字符变量名的值是多少?运营商?我希望不是像数组名这样的地址。

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

在这种特定情况下,您声称number1int,因此&number1int *类型的表达。

答案 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=apa++是合法的。但是数组名称不是变量;像a=paa++这样的结构是非法的。

答案 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处,此处ab将表示您存储在分配给它们的内存位置中的整数,但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,这不是您通常想要的。