为什么可以改变二级指针的指向来改变一级指针的指向
时间: 2024-05-08 13:15:42 浏览: 18
这是因为二级指针存储的是一级指针的地址,通过改变二级指针的值,可以改变指向一级指针的地址,从而改变一级指针的指向。举个例子,假设有一个指向int类型的一级指针p和一个指向一级指针p的二级指针q,可以通过修改q的值来改变p的指向:
```
int x = 10;
int *p = &x;
int **q = &p;
// 修改p的指向
int y = 20;
p = &y;
// 通过q修改p的指向
int z = 30;
*q = &z;
```
在上面的代码中,p一开始指向变量x的地址,q指向指向x的指针p的地址。首先,我们通过修改p的值来改变p的指向,使其指向变量y的地址。然后,我们通过修改q的值,将其指向指向z的指针的地址,从而改变了p的指向。现在,p指向变量z的地址。
相关问题
二级指针可以指向一级指针吗?
是的,二级指针可以指向一级指针。在 C 语言中,指针是一种变量类型,它存储了一个内存地址。一级指针存储一个地址,而二级指针存储的是一个一级指针的地址。因此,可以使用二级指针来操作一级指针,例如通过二级指针来修改一级指针指向的内存地址中的值。下面是一个示例代码:
```
#include <stdio.h>
int main() {
int a = 10;
int *p1 = &a;
int **p2 = &p1;
printf("a = %d\n", a);
printf("*p1 = %d\n", *p1);
printf("**p2 = %d\n", **p2);
**p2 = 20;
printf("a = %d\n", a);
printf("*p1 = %d\n", *p1);
printf("**p2 = %d\n", **p2);
return 0;
}
```
输出结果为:
```
a = 10
*p1 = 10
**p2 = 10
a = 20
*p1 = 20
**p2 = 20
```
在上面的代码中,`p1` 是一个一级指针,指向变量 `a` 的地址。`p2` 是一个二级指针,指向一级指针 `p1` 的地址。通过 `**p2` 可以访问 `p1` 指向的变量 `a` 的值。在代码中,通过 `**p2 = 20` 修改了变量 `a` 的值,最后输出的结果中,`a` 的值已经变成了 20。
c语言设计一个二级字符指针指向名为map的二级数组
可以使用以下代码来声明一个二级字符指针指向名为map的二级数组:
```c
char **map; // 二级字符指针
// 声明二级数组
char *rows[] = {"row1", "row2", "row3"};
char *cols[] = {"col1", "col2", "col3"};
// 将二级数组赋值给二级字符指针
map = (char **)malloc(sizeof(char *) * 3);
map[0] = rows;
map[1] = cols;
```
这里的 `map` 是一个二级字符指针,它指向一个二级数组。首先声明了一个二级字符指针 `map`,然后声明了两个二级数组 `rows` 和 `cols`。接着,使用 `malloc` 分配了一个长度为 3 的字符指针数组,并将 `rows` 和 `cols` 分别赋值给了 `map[0]` 和 `map[1]`,这样就完成了二级字符指针指向二级数组的操作。