一个指向指针的指针(一个有关指向指针的指针的问题)

本文目录
- 一个有关指向指针的指针的问题
- 有关C语言指向指针的指针
- C语言中指向指针的指针是什么意思
- 指向指针的指针是什么意思
- 请教一个指向指针的指针的问题
- 关于指向指针的指针的用途问题
- 指向指针的指针指向了另一个指针的指针
- 关于指向指针的指针
一个有关指向指针的指针的问题
指针,全称是指针变量,如:char *pc ; pc是指针变量,我习惯上叫他指针(就因为这个叫法让人迷惑了)。char **ppc;ppc也是指针变量,我们习惯上称它为指向指针的指针。
这些习惯上的叫法,其实没有真正体现它们的实际意义!我们来看定义:
指针变量(定义):存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址(我们可以根据这个地址获取到数据的值)。
所以,上面举的例子中,char **ppc的严格意义说法应该是:ppc是指向地址的指针变量!
还有一种习惯说法是:
int a;
int *pi=&a ;
这时,我们习惯称pi指向a。实际上是把a的内存地址存到pi变量中了,如果想引用pi所指的地址中的数据,就用*pi。
q = &a;
*q 就是a
**q =*(*q)就是a
a是一个字符串的首地址。
char *a),每个元素都是一个字符型指针,这些指针分别指向常量串:="man","woman","girl","boy","sister" 。
不知现在你能理解你的输出结果了吗?
有关C语言指向指针的指针
指针变量能指向任意一个变量(包括指针变量)
指向指针的指针定义方法 ,例如int **p; 定义了一个指针变量p,他指向另一个指针变量(该指针变量又指向一个整型变量),是一个2级指针,由于指针运算符*是按自右向左顺序结合,因此上述定义相当于:int *(*p); (*p)是指针变量形式,它外面的*表示p指向的又是一个指针变量,int表示后一个指针变量指向的是指针变量
怎样使一个指针变量指向另一个指针变量呢?
int **p1;
int *p2;
int i=3;
p2=&i (使p2指向i)
p1=&p2 (使p1指向p2)
C语言中指向指针的指针是什么意思
指针其实也是个变量(只要是变量就一定有相应的内存空间) 只是这个变量比较的特殊
它只能存放别的变量的地址 变量时在内存中是有地址的
你要明确两概念:变量值和变量地址
变量值:是变量本身的内容
变量地址:是该变量在内存中的位置编号
通俗来讲就是说这个变量fp只能接受一个指针变量的地址所以你看第8行在p前面加了一个’&‘取地址符号 也就是说把p这个变量的地址给了fp了fp的内容就是p的地址
1.接下来9行输出了a的值这个直接通过变量名a就能找到该变量的地址并且直接输出了a的值1
2.第10行你会发现输出列表参数里面是*p是什么意思?其中的“*”在这里表示指针运算符, 就是说以p的内容为地址找到该地址里面的值 p里面不是村的a变量的地址吗不是吗? 你看第7行是不是在a变量前面加了“&”取地址运算符了 所以*p就是1
3.第11行**fp 这里出现了2个‘*’号 别急 由于指针运算符的结合方向为“自右至左”所以*fp先运算那么*fp是什么就是一fp的内容为地址找到的变量的值是什么 fp里面存放着p的地址 显然此时*fp最终变成了p这个变量的地址了
4.*(p变量的地址) 到了这一步就是说以p的内容为地址找到对应的变量了 显然是a这个变量了
第11就是你说的指向指针的指针了。
指向指针的指针是什么意思
1
指针也是一个变量,在PC机windows
vc里占4个字节,dos的tc里是2个字节
2
指针变量里存的是一2字节或4字节无符号整数,数值是指针指向内容的内存编号
3
指向指针的指针就是
指针A里存有指针B的所在内存地址,指针B里面存有变量A所在的位置
你有三个变量int
**pa
,*pb,*C
分别存在0X4000
0X4002
0X4004的内存单元
c=0x1234
pb=&c
pa=&pb
那么内存中0x4000到0x4005
这6个字节内容就是
0X02
0X40
0x04,0x40,0x34,0x12
因为pc
是小端在前
请教一个指向指针的指针的问题
问题不准确,首先,指针变量是一个存放地址的变量,内容大小是一个int大小的字节,也就是1byte,
char *p=&a,就不是对的,因为指定了 p 为char*,那么,p=后面只能接一个存放了char类型的地址,因为a是一个数组,单独使用a就代表其第一个元素的地址,,具体可以。所以,a本来就是一个地址。如果定义char p*=a,那么p++后,*p=b;如果是指向指针的指针,定义是char **p=&a,
那么p++指向哪里就不确定,因为,存放,a【】的地址的下一段是哪里不确定。
比如,abcde是存放在01234,这个地址的,而a=01234,b在01235,c...而char** p=&a,那就是p=存放01234的地址,如果是05678;所以p++不等于b
关于指向指针的指针的用途问题
通常,我们定义一个一维数组时,用一个指针可以操作该数组;
如int a; int *b; b = a;
而当我们定义一个二维数组时,可以用一个指针的指针来操作该数组;
如int a 等价于 *(*(b+i)+j)了
而此处char *name 相当于一个二维字符数组,可以定义一个二维的字符指针来操作该数组,此处定义的是char **p;
p = name + i;//获取各字符串首地址
printf("%s\n",*p);//即可以打印各字符串了
如果在定义的地方,用*p替换**p的话,将不会打印出正确的字符串。
指向指针的指针指向了另一个指针的指针
前半句,“指向指针的指针” 就是二级指针, 它可以指向一个一级指针,它的代码表示如int **p;
后半句,“另一个指针的指针”,假设另一个指针是int *q; 而q的指针就是 &q
整句话形成了语句就是:
int **p;
int *q;
p = &q
所以 这是完全可以的, 此句无错
关于指向指针的指针
p代表那个指针, *p代表p指向的那个指针, **p代表一个整数.
例如:
int i = 10;
int *p1 = &i
int **p = &p1
以上p1这个单元保存了i的地址, p这个单元包含了变量p1的地址.
其实应该这样理解:
int* p1;
(int*)* p;

更多文章:
kali上传文件到apache服务器(如何在macOS系统和KaliLinux系统之间共享文件)
2025年10月25日 23:30
c语言一维数组有几个数(c语言的一维数组中至少要有几个元素)
2025年11月27日 13:30
织梦岛隐藏要素(塞尔达传说织梦岛脸孔神殿迷宫怎么通关 脸孔神殿迷宫)
2025年9月18日 18:45
最新版android studio安装(如何安装android studio)
2025年9月24日 10:15
97的十六进制(97 98 换成八进制 如何换 如何将十进制转换成八进制或者十六进制 哪位大仙帮帮忙)
2026年4月5日 15:00
redis命令登录(软件Xshell连接Redis操作教程)
2026年6月6日 17:30
category nouns(the different lexical category in translation)
2026年1月9日 10:45
哈夫曼树编码不唯一那解码结果(如何解决哈夫曼树不唯一的问题)
2025年6月24日 02:45
关系数据库管理系统有哪些?(下面哪些属于关系型数据库管理系统())
2026年5月2日 12:15
insertrow(在Power Query中如何插入自定义行)
2025年10月10日 12:30











