int main() { int a[]= {1,2,3,4,5,6,7,8,9}; int (*p1)[9]; p1=&a; int *p2=a; int q=a[3]; int &p3=q; q--; int *p4[]= {p2,p2+1,p2+2,p2+3,&p3,&q}; cout<<(*p1)[0]<<endl; cout<<*(p2+1)<<endl; cout<<p3<<endl; cout<<*p4[4]<<endl; cout<<*p4[q--]<<endl; } 输出是多少
时间: 2024-04-27 15:23:30 浏览: 84
输出结果是:
1
2
3
4
5
解析:
1. `(*p1)[0]` 表示指针 `p1` 所指向的数组 `a` 的第一个元素,即输出 1。
2. `*(p2+1)` 表示指针 `p2` 指向的地址加 1,即指向数组 `a` 的第二个元素,即输出 2。
3. `p3` 是 `a[3]` 的引用,即指向数组 `a` 的第四个元素,即输出 3。
4. `*p4[4]` 表示指针数组 `p4` 的第五个元素,即指向 `p3` 的指针,输出 `p3` 的地址,即输出 4。
5. `*p4[q--]` 表示指针数组 `p4` 的第 `q` 个元素,由于 `q` 的值在前面已经减了 1,所以指向 `q` 的指针,即指向 `a[3]` 的指针,输出 5。
相关问题
int main() (int a[9] ={1,2,3,4,5,6,7,8,9,}int *p =&a+1printf("%d\n",p[-1]);return 0;
这段代码也存在一些语法错误。首先,数组的初始化应该使用花括号而不是方括号,例如`int a[9] = {1,2,3,4,5,6,7,8,9};`。其次,在取地址操作符`&`后面不应该跟数组名,而应该是数组中的某个元素,例如`&a[0]`。最后,`printf`函数的格式化字符串中的逗号应该是英文逗号而不是中文逗号,例如`printf("%d\n", p[-1]);`。
修正后的代码如下所示:
```c
#include <stdio.h>
int main() {
int a[9] = {1,2,3,4,5,6,7,8,9};
int *p = &a[0] + 1;
printf("%d\n", p[-1]);
return 0;
}
```
以上代码的输出结果是1,因为`p[-1]`表示指针`p`向前偏移一个元素,即指向数组中的第一个元素1。
c语言已知int arr1[]={1,3,5,7,9}; int arr2[]={2,4,6,8,10};交换两个数组的值并显示出来。
以下是交换两个数组的值并显示的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr1[] = {1, 3, 5, 7, 9};
int arr2[] = {2, 4, 6, 8, 10};
int temp;
int i;
for (i = 0; i < 5; i++) {
temp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = temp;
}
printf("arr1: ");
for (i = 0; i < 5; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
printf("arr2: ");
for (i = 0; i < 5; i++) {
printf("%d ", arr2[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
arr1: 2 4 6 8 10
arr2: 1 3 5 7 9
```