C ++中数组的指针

时间:2016-02-02 13:57:15

标签: c++ arrays

我在C ++中看到了以下代码行。我无法理解它。我希望我能在这里得到一些帮助。

// Example program
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int a[] = {1,2,3,4};
    cout<<*a+1<<;
    cout<<a[1];

}

问题: 我不明白* a + 1是如何工作的。这似乎很不直观 - 我们在这里向数组添加1吗?

3 个答案:

答案 0 :(得分:0)

在表达式*a + 1中,数组a在指针上下文中计算,因此它指向数组中的第一个值。

接下来,*a取消引用该指针(意味着它获取指针指向的值),并为您提供数组中第一个1的元素。

最后,1会添加到该值并打印出来,因此会输出2

答案 1 :(得分:0)

首先是这句话

cout<<*a+1<<;
          ^^^^

在语法上是错误的。

我认为你的意思是

cout << *a+1 << endl;

表达式*a相当于a[0]。所以你可以写一下

cout << a[0] + 1 << endl;

考虑到语义a[0] + 1a[1]不同,但应用于您的示例,两个表达式将产生相同的结果。:)

答案 2 :(得分:0)

要理解表达式*a+1,您应该考虑运算符优先级:

取消引用*具有更高的优先级,因此a(数组的名称也是指向第一个元素的指针)被取消引用,给出值1

然后,1将被添加到值中。

运营商优先级在此处描述http://en.cppreference.com/w/cpp/language/operator_precedence