LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1409|回复: 11

大家是否可以讨论一下指针的指针?

[复制链接]
发表于 2003-7-4 16:46:11 | 显示全部楼层 |阅读模式
是否可以讲一下原理,在什么情况下用得比较多,如何灵活应用。
发表于 2003-7-4 17:40:14 | 显示全部楼层
原理上没有什么好说的。你有什么不清楚的就说出来,大家讨论讨论。
 楼主| 发表于 2003-7-4 19:48:24 | 显示全部楼层
有一个函数原形是char *call(char *p, char **arg, int *i)
是这样调用这个函数的call(p, args, &i)
p: char *p
args: char *args[30]
i: int i
中间一个参数是一个数组指针,怎么函数的中间是指针的指针?
而且在函数里面也有*arg++的语句。
不知道该怎么理解!
发表于 2003-7-4 23:10:26 | 显示全部楼层
不知道怎么说。

args 是数组名,因而是一个指针,数组内容是字符指针,因而args是指针的指针(但不是变量)
arg 是指针的指针,基类型是char
所以arg 可以是args的形参。

*arg++
*arg++  等于 *(arg++)
设arg=args,则arg++   等于  &args[1]
*(arg++)  等于  args[1]
发表于 2003-7-4 23:13:17 | 显示全部楼层
char *arg是指针,char *arg[30]是有30个指针元素的指针数组。传递这个指针数组的地址要用&(*arg),如果要引用数组中的指针所指向的元素就是**arg。
发表于 2003-7-5 01:20:55 | 显示全部楼层
指向指针的指针,你在纸上画画,好好想想就转明白了。
发表于 2003-7-29 00:13:49 | 显示全部楼层
int val=3.14;
int *pi=val;
也许是我理解有问题。始终不明白这个东西。*pi是一个指针,那么pi的值是不是就是val这个值的地址啊?那么*pi=&val;这一句书上说的是把val的地址赋值给pi。我觉得这一句明明是把val的地址赋值给指针*pi嘛。不知道是我理解错了还是书错了。
所说的书就是版主推荐的《c++primer》第73页
发表于 2003-7-29 01:59:45 | 显示全部楼层
你理解错了,
int *pi = &val; 是声明语句(也是定义),int * 是类型,pi是变量,= &val是初始化部分,因为pi的类型是int *所以应该用&val初始化pi,这里不能把*pi连起来看成是对pi解引用,应该把int *连起来看成是类型说明。
在一般语句中的*(如:*pi)是解引用操作符,在声明语句中的*是指针类型的说明符,不是一回事,C语言中有一些混淆的操作符,比如一般语句中的*也可能是乘号,这些要在上下文中注意一下。
发表于 2003-7-29 09:21:21 | 显示全部楼层
一个指针存放一个地址,那么指针的指针就存放 ”存放一个地址的指针 “的地址
发表于 2003-7-29 20:52:46 | 显示全部楼层
libinary:
理解了你的说法,但是如果按照你的说法来做的话那么在一个语句里面定义两个指针是不是这样呢:int* pt1,pt2;这样对么,好像不对吧。请指点一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表