Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;指针语法不正确?_C++_Arrays_Pointers - Fatal编程技术网

C++ C++;指针语法不正确?

C++ C++;指针语法不正确?,c++,arrays,pointers,C++,Arrays,Pointers,我在这个链接中看到了这个代码-。请看第一段代码 #include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // let us have array address in pointer. ptr = var; for (int i = 0; i < MAX; i++) { cout <&

我在这个链接中看到了这个代码-。请看第一段代码

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
int  var[MAX] = {10, 100, 200};
int  *ptr;

// let us have array address in pointer.
ptr = var;
for (int i = 0; i < MAX; i++)
{
   cout << "Address of var[" << i << "] = ";
   cout << ptr << endl;

   cout << "Value of var[" << i << "] = ";
   cout << *ptr << endl;

   // point to the next location
   ptr++;
}
return 0;
}
#包括
使用名称空间std;
常数int MAX=3;
int main()
{
int-var[MAX]={10100200};
int*ptr;
//让我们在指针中有数组地址。
ptr=var;
对于(int i=0;i
实际上,您可以获取数组的地址,尽管它不太常见。然后,该地址就是整个数组的地址,如下所示:

int (*parr)[3] = &var;
例如,现在cou可以说,
inti=(*parr)[1];
var
的第二个元素初始化
i
,100

整个数组的地址在数字上与它的第一个元素的地址相同,因为毕竟第一个元素是数组开始的地方。这可能看起来很有趣:那有什么意义呢

不同之处在于类型,它(除了关于类型兼容性的语法问题——但在C语言中,您总是可以抛弃这些问题!)决定了在执行指针算术时会发生什么

int *ptr = var;
int (*parr)[3] = &var;

printf("ptr: %p, parr: %p\n", ptr, parr);
printf("Increment ptr: %p, incremented parr: %p\n", ptr+1, parr+1);

var
将衰减为指向其第一个元素的指针

ptr = var;
相当于

ptr = &var[0];
&var
是指向数组的指针,而不是指向
int

int (*aptr)[MAX] = &var;
将是有效的,但这并不意味着相同-
*aptr
是包含
MAX
元素的数组,而不是
int

int (*aptr)[MAX] = &var;
该教程声称“指针和数组在许多情况下是可互换的”,这是完全错误的

只有在这种情况下,才能“交换”任何内容;当某些内容需要指针时,数组会衰减为指向其第一个元素的指针。

没有一种情况可以使用指针代替数组

令人困惑的是,
ptr
在非正式对话中通常被称为“数组指针”甚至“数组”,尽管这在形式上是不正确的。

这是因为“指向数组第一个元素的指针”是一个很好的说法,对于非初学者来说,从上下文中通常可以清楚地看出它的实际含义。

对于数组,名称可以用作指针。谢谢。我理解了。谢谢。我现在理解了为什么语法是正确的。“没有一种情况可以用指针代替数组”可以说比“它们完全可交换”更“错误”“。对于参数传递,在指针算术表达式和索引中使用,这是数组和指针最常见的操作,它们确实是完全相同的interchangeable@PeterA.Schneider数组->指针衰减的更多示例。“可互换”是双向的。