int (*p)[3] = a; 详细解释
时间: 2024-04-18 13:31:35 浏览: 14
题目解析:
该程序定义了一个整型数组 a[],然后又定义了两个指针变量 p 和 q,其中 p 指向数组 a[] 的第一个元素,q 则指向数组 a[] 的最后一个元素。
printf() 函数中使用了表达式 q-p,表示 q 指针减去 p 指针的值,它的结果是 5,因为两个指针之间隔了 5 个整型元素,即 a[0]、a[1]、a[2]、a[3]、a[4]。
程序的输出结果是 5。
答案:输出结果为 5。意思是 q 指针比 p 指针多了 5 个元素的距离。
相关问题
int a=0;int *p = a; 和 int *p = &a; 这里int *p=a;与int *p=&a;有什么区别?
在C++中,int a=0; 表示定义了一个整型变量a并将其初始化为0。
而 int *p = a; 表示将整型变量a的值赋值给一个指向整型数据的指针p。但是这是错误的,因为指针变量p需要存储一个地址,而不是一个整型值。因此,这个语句会编译失败。
相反,int *p = &a; 表示将整型变量a的地址赋值给一个指向整型数据的指针p。这是正确的用法,并且p指向的是整型变量a的地址。
因此,int *p = a; 和 int *p = &a; 语句之间的区别是,前者将整型值赋值给指针变量,而后者将整型变量的地址赋值给指针变量。
main 10 10 10 10 int a = 10; int *p = &a, **pp = &p; printf("a=%d,*p=%d,**pp=%dla"a,*p,**pp); *p = 20; printf("a-%d,*p=%d,**pp=%d\n",a,*р,**pp); **фр = 30; printf('a=%d,*p=%d,**pp=%d10”,a,*p,**pp);
这段代码有一些问题,我来解释一下。首先,main函数的定义应该是:int main(),而不是main 10 10 10 10。其次,在第一行代码中,应该加上分号,即int a = 10;。接下来,第5行应该是printf("a=%d,*p=%d,**pp=%d\n",a,*p,**pp);,而不是printf("a=%d,*p=%d,**pp=%dla"a,*p,**pp);,需要注意的是,这里的换行符应该写成\n,而不是10。最后一行代码也有问题,应该是**pp = 30;,而不是**фр = 30;。修改后的代码应该是这样的:
```c
#include <stdio.h>
int main() {
int a = 10;
int *p = &a, **pp = &p;
printf("a=%d,*p=%d,**pp=%d\n", a, *p, **pp);
*p = 20;
printf("a=%d,*p=%d,**pp=%d\n", a, *p, **pp);
**pp = 30;
printf("a=%d,*p=%d,**pp=%d\n", a, *p, **pp);
return 0;
}
```
这段代码的执行结果是:
```
a=10,*p=10,**pp=10
a=20,*p=20,**pp=20
a=30,*p=30,**pp=30
```
这说明,指针p指向的变量a的值可以通过*p来获取和修改,而指向指针p的指针pp可以通过**pp来获取和修改指针p所指向的变量a的值。