设有int a=2,b=1,*p=&a;,则执行语句*p=3;a=atb;后,变量a的值为 。怎么做
时间: 2024-06-06 16:05:10 浏览: 26
执行*p=3;之后,a的值变成了3,因为p指向了a,所以*p的值就是a的值。
执行a=atb;之后,a的值应该是2,因为b的值是1,所以a的值没有变化。但是,这里的代码中atb应该是一个错误,应该修改为*b,表示取指针p所指向的内存单元的值,即a的值,所以正确的代码应该是a=*p*b;。
综上所述,执行*p=3;a=atb;后,变量a的值为6。
相关问题
如何理解这行代码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 *p=a;与int *p=&a;有什么区别?
在C++中,int *p = a; 和 int *p = &a; 这两个语句有显著的区别。
int *p = a; 表示将一个整型数组a的首地址赋值给一个指向整型数据的指针p。此时,p指向的是数组a的第一个元素的地址。
而 int *p = &a; 表示将一个指向整型数组a的指针赋值给一个指向整型数据的指针p。此时,p指向的是整个数组a的地址。
换句话说,int *p = a; 可以用来遍历整个数组a,而 int *p = &a; 通常用于传递整个数组a的地址给函数,或者用于在函数中操作整个数组a。