C和C++指针的指针是什么类型?

占用多少位的地址空间?不同类型可以互相赋值吗?这样代码有错吗?要怎么改?voidInitList(SqList**L){*L=(SqList*)malloc(sizeof... 占用多少位的地址空间?不同类型可以互相赋值吗?
这样代码有错吗?要怎么改?
void InitList(SqList **L)
{ *L=(SqList *)malloc(sizeof(SqList));
*L->length=0; // *L要不要加括号?
}
SqList * P =NULL;
InitList(&P);
展开
 我来答
Bk0X
推荐于2017-11-25 · TA获得超过9413个赞
知道小有建树答主
回答量:1217
采纳率:60%
帮助的人:663万
展开全部
指针占据多少空间需要看系统, 32位系统就是32位, 64就是64位.
可以sizeof(int*)

不同类型的指针占据的空间是一样多的, sizeof(int*)和sizeof(double*)大小一样.
虽然大小一样, 但是语法不允许直接赋值, 需要强制转换, 这是为了防止程序员在无意之间犯错误.

这样代码有错吗?要怎么改?
要加个括号, (*L) ->length;
在不确定要不要加括号的情况下, 那么最好加上, 这样代码的可读性也会比较好.
更多追问追答
追问
void InitList(SqList **L)这样定义和InitList(&P)这样调用可以吗?
SqList 是一个结构,SqList **L表示什么类型的指向什么类型的指针呢?
*L是什么类型,L又是什么类型呢?
追答
(1) void InitList(SqList **L)这样定义和InitList(&P)这样调用可以吗?
可以. P的类型是SqList*, 对P取地址就是SqList**, 参数匹配

(2) SqList 是一个结构,SqList **L表示什么类型的指向什么类型的指针呢?
SqList**是指针的指针, 指向一个SqList*,
SqList**需要2次解引用才会成为SqList类型

(3)*L是什么类型,L又是什么类型呢?
void InitList(SqList **L) // L是SqList**类型
*L是SqList* 类型, **L是SqList, 每解引用一次指针层数减一
春夏秋冬
2012-07-07 · 知道合伙人教育行家
春夏秋冬
知道合伙人教育行家
采纳数:490 获赞数:1419

向TA提问 私信TA
展开全部
1、指针的指针,是个记录单重(一个*)指针变量首地址的指针变量;
2、与计算机位数有关:16位计算机,2Byte;32位,4B;64位,8B;
3、象char ** p1;
int **p2;
将P2赋值给P1,不允许,也没意义
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
键盘未找到
2015-06-20 · TA获得超过328个赞
知道小有建树答主
回答量:403
采纳率:100%
帮助的人:264万
展开全部

0.    所有的指针都是一个4字节的整数。任何类型的指针之间总可以进行强制转换,就是因为它们在内存中所占空间是一样的。

1.    变量:声明

        T    v;

  变量的值(右值,类型是T)被存储在内存中某个地址(左值,类型是T*)空间中。

2.    指针:声明和使用

        T    * ptr;
        ptr = &v;

        指针变量的值(右值,类型是T *,是其所指向变量的地址)被存储在内存中某个地址(指针变量的左值,类型是T **)空间。

3.    二级指针(指针的指针):声明与使用

        T    * * ptrPtr;

        同2,二级指针变量的值(右值,类型是T **,是所指一级指针的地址)被存储在内存中某个地址(左值,类型是 T ***)空间。

4.    同理可以有三级指针...

5.    由2、3、4可知,指针(无论一级、二级……指针)都是用于存储地址的,所以,不同类型的指针之间总可以强制转换。因此,某些函数用void *类型的指针作为形参,而在函数内部,可以根据需要转成任意数据类型的指针。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
槛外人网上人生
2012-07-07 · TA获得超过6254个赞
知道大有可为答主
回答量:1710
采纳率:0%
帮助的人:542万
展开全部
short int * * ppi; //这是一个指向指针的指针,注意有两个*号
ppi=π

第一句:short int * * ppi;——申明了一个指针变量ppi,这个ppi是用来存储(或称指向)一个short int * 类型指针变量的地址。
第二句:&pi那就是取pi的地址,ppi=π就是把pi的地址赋给了ppi。即将地址值10赋值给ppi。
ppi的值是多少呢?——10。
*ppi的值是多少呢?——6,即pi的值。
**ppi的值是多少呢?——50,即I的值,也是*pi的值。
呵呵!不用我说太多了,我相信你应明白这种指针了吧!
追问
我补充了问题,看一下怎么改?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
扈怀炜4h
推荐于2018-05-11 · TA获得超过6038个赞
知道大有可为答主
回答量:6907
采纳率:67%
帮助的人:1327万
展开全部
指针的指针还是指针类型,他是指向一个指针的存储空间的。
比如: int a=100;
int *p=&a;
int **p1=&p;
那么 p1 就是指向p的存储空间,也就是说,*p1 存放的是一个十六进制的常整型数a的地址
p 里存放的是 a的地址, *p得到就是 a的值,即 100
**p1 也可以得到 100
指针是指向一个变量的存储空间的变量,变量中存放的是一个长整型数,所以一个指针变量所占的内存空间是4字节。
指针变量用来指向一个变量的存储位置,那么就要求,一个指针要指向什么类型的变量,就必须把这个指针变量声明成该类型,否则会有错误。
实质上,指针是c、c++中的一种结构型数据类型,和结构体,共用体等一样,属于用户自定义数据类型。
定义一个指针的时候,首先要用类型名 * 表示这是一个指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式