已知 int a[10]={0,1,2,3,4,5,6,7,8,9};int *p=a;,
C语言分别编程,求如下表达式的值:"
(1)p(2)p(3)p++.
(4)(p++).(5)(++p)。(6)++(p).(7)--(p)。(8)(p--).(9)(--p)。
有帮助的话 采纳一下
#include <iostream>
using namespace std;
int main() {
int a[10]={0,1,2,3,4,5,6,7,8,9};
int *p=a;
// (1)p
cout << *p << endl;
// (2)_p
cout << *(p+1) << endl;
// (3)p++.
cout << *p << endl;
p++;
// (4)(p++)
cout << *p << endl;
p++;
// (5)_(++p)
p++;
cout << *p << endl;
// (6)++(_p)
p++;
cout << *p << endl;
// (7)--(p)
p--;
cout << *p << endl;
// (8)(p--)
cout << *p << endl;
p--;
// (9)_(--p)
p--;
cout << *p << endl;
}
首先,我们来解释一下括号的作用。括号的作用是改变运算符的优先级,让被括号括起来的表达式先被计算。在上面这个例子中,括号的作用就是改变指针类型的优先级,让括号内的表达式优先计算,从而确定指针类型。
那么,int (*p)[3] = a[5][3] 这个表达式具体是怎么计算的呢?我们可以将其分解为两个部分来理解:
第一部分:int (*p)[3]
这个表达式是一个指针类型的定义,其具体含义是“指向一个长度为3的整型数组的指针”。也就是说,p是一个指向整型数组的指针,该数组长度为3。
第二部分:a[5][3]
这个表达式是一个二维数组的访问,其中a是一个二维数组,第一维长度为6,第二维长度为3。在这里,我们使用了一个常数5作为第一维下标,使用了常数3作为第二维下标,从而访问了数组中的一个元素。由于该元素是一个长度为3的整型数组,因此我们可以将其地址赋给一个指向长度为3的整型数组的指针,也就是上面第一部分中定义的p。
总结一下,上面的表达式就是定义了一个指针p,该指针指向a数组中某一个元素所在的长度为3的整型数组。这个表达式很奇怪,但是它在某些场合下是很有用的,比如说在处理二维数组时。