我在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吗?
答案 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] + 1
与a[1]
不同,但应用于您的示例,两个表达式将产生相同的结果。:)
答案 2 :(得分:0)
要理解表达式*a+1
,您应该考虑运算符优先级:
取消引用*
具有更高的优先级,因此a
(数组的名称也是指向第一个元素的指针)被取消引用,给出值1
然后,1
将被添加到值中。
运营商优先级在此处描述http://en.cppreference.com/w/cpp/language/operator_precedence