我想知道为什么我应该这样做:
int myArray[5];
for(int i = 0; i < 5; i++)
{
scanf("%d", &myArray[i]);
}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
for(int i = 0; i < 5; i++)
{
scanf("%d", myArray[i]);
}
Run Code Online (Sandbox Code Playgroud)
因为scanf需要知道它应该在哪里写入它所读取的输入.要获取内存位置,需要使用指针,而myArray[i]不是指针,它是一个值.
要获得指针,可以使用&符号(也称为地址运算符).您还可以依赖于数组自然衰减指向其第一个元素的事实,并通过使用并向数组中的条目添加偏移量来使用指针算法myArray.这是有效的,因为myArray[i]它等同于*(myArray + i),并且类似地&myArray[i]等同于&*(myArray + i)(但由于地址运算符&和解除引用运算符*相互抵消(myArray + i),它们是相同的,它们是相同的myArray + i).
至于其他类型的变量,如果变量已经是一个指针,那么你不必使用address-of运算符(因为如果你这样做,你会得到一个指向指针的指针),例如当你只读取一个字符串时需要传递实际变量.对于非指针变量,您需要使用address-of运算符.