int n; int a=3; int *p,*q; p=&a; *p=n;
时间: 2024-04-16 14:25:50 浏览: 21
题目解析:
该程序定义了一个整型数组 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 = 10;int *p1 = &a;int **p = &p1;
这行代码定义了一个整型变量a,其值为10。接着定义了一个指向a的指针变量p1,它的值为a的地址。最后,定义了一个指向指针变量p1的指针变量p,它的值为p1的地址。
我们可以通过p1来访问a的值,例如*p1就表示a的值。而通过p,我们可以访问p1的值,例如*p就表示p1的值,即a的地址。同时,通过**p,我们也可以访问a的值,例如**p就表示a的值。
这样的多级指针在动态内存分配和二维数组等场景下非常有用。例如,我们可以使用双重指针来动态分配一个二维数组,如下所示:
```
int **p;
int n = 3, m = 4;
p = (int **)malloc(sizeof(int*) * n);
for (int i = 0; i < n; i++) {
p[i] = (int *)malloc(sizeof(int) * m);
}
```
这里,我们先分配一个指向指针变量的指针p。然后,我们通过循环分别为每个指针变量分配一个整型数组,从而动态分配了一个n行m列的二维数组。
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; 语句之间的区别是,前者将整型值赋值给指针变量,而后者将整型变量的地址赋值给指针变量。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)