#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 22:25:47 浏览: 13
在这段代码中,`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(void) { int a,*p; a=5; *p=&a; printf("%d",*p); } 这串代码有什么问题
这段代码有两个问题:
1. 变量 p 没有被初始化,它的值是未定义的。因此,将其解引用(即使用 `*p`)会导致未定义行为。
2. 在赋值语句 `*p=&a;` 中,应该将 `&a` 赋值给 `p`,而不是 `*p`。正确的代码应该是 `p = &a;`。
下面是修改后的代码:
```c
#include <stdio.h>
int main(void) {
int a, *p;
a = 5;
p = &a;
printf("%d", *p);
return 0;
}
```
输出结果是 `5`。
#include <stdio.h> void main() { static int a [6]={2,4,6,3,5,7}; int *p; for(i=0;i<6;i++,p++) printf(" %d”,*p);
这段代码存在几个问题:
1. 函数 main 应该声明返回类型为 int,而非 void。
2. 变量 i 没有被定义,应该在循环前加上 int i = 0;。
3. 指针变量 p 没有被初始化,应该在循环前加上 p = a;。
4. printf 函数中字符串的引号不匹配,应该改为 printf(" %d", *p);。
修正后的代码如下:
```c
#include <stdio.h>
int main() {
int a[6] = {2, 4, 6, 3, 5, 7};
int *p = a;
for (int i = 0; i < 6; i++, p++) {
printf(" %d", *p);
}
return 0;
}
```
输出结果为:
```
2 4 6 3 5 7
```