#include<stdio.h> int main() { int a[3]={4,5,6}; intp=a; printf("%d,%d,%d\n",a[0],a[1],a[2]); printf("%d,%d,%d\n",*a,*(a+1),*(a+2)); printf("%d,%d,%d\n",p[0],p[1],p[2]); printf("%d,%d,%d\n",*p,*(p+1),*(p+2)); }其中的 printf("%d,%d,%d\n",*a,*(a+1),*(a+2)); 和printf("%d,%d,%d\n",*p,*(p+1),*(p+2)); 有什么区别?
时间: 2024-04-13 21:25:47 浏览: 67
在这段代码中,`printf("%d,%d,%d\n",*a,*(a+1),*(a+2));`和`printf("%d,%d,%d\n",*p,*(p+1),*(p+2));`两个printf语句实际上是等价的。
- `*a`表示解引用指针a,获取数组a的第一个元素的值。
- `*(a+1)`表示解引用指针a+1,获取数组a的第二个元素的值。
- `*(a+2)`表示解引用指针a+2,获取数组a的第三个元素的值。
同样地,
- `*p`表示解引用指针p,获取数组a的第一个元素的值。
- `*(p+1)`表示解引用指针p+1,获取数组a的第二个元素的值。
- `*(p+2)`表示解引用指针p+2,获取数组a的第三个元素的值。
这两种方式都可以用来访问数组a中的元素,并且结果是相同的。这是因为在这个程序中,指针p被初始化为指向数组a的第一个元素,所以指针p和数组名a可以互换使用来访问相同的数据。
相关问题
//程序阅读,输出结果 #include <stdio.h> int main() { int a = 5; int *p = &a; (*p) += 6; printf("%d", a); }
程序输出的结果应该是 11。因为程序中定义了一个 int 类型的变量 a,初始值为 5。然后定义了一个 int 类型的指针变量 p,将 a 的地址赋值给了 p。接着对指针变量 p 所指向的值进行修改,即将 *p 的值加上 6。由于 p 指向的是 a 的地址,所以这个操作实际上是将 a 的值加上了 6。最后输出 a 的值,结果为 11。
#include <stdio.h> int main() { int a[10] = { 1,2,3,4,5 }; int *p; p = a; a[3] = *p++; *p = 5; for (int i = 0; i < 5; i++) printf("%d ", a[i]); return 0; }
这段代码的输出结果是:1 2 3 2 5。代码中定义了一个名为a的数组,里面包含了5个整数。还定义了一个指向整型的指针p。p被赋值为a的首地址,也就是a[0]的地址。接下来,将a[3]的值赋值为*p++,这是一个后自增,所以*p的值为a[0],a[3]的值也就变成了2。然后将*p的值赋值为5,也就是a[1]的值变成了5。最后通过for循环输出a数组中的每个元素。
阅读全文