结构体指针与结构体指针的指针的区别?
感觉题目很拗口??嘻嘻!先定义个结构体:typedefstruct{chardata;structlistNode*nextPtr;}node;然后声明个*ListNod...
感觉题目很拗口??嘻嘻!先定义个结构体:typedef struct{ char data; struct listNode *nextPtr;}node;然后声明个*ListNodePtr的指针指向结构node:typedef node *ListNodePtr;问题:1.ListNodePtr s; 这个s是结构体指针吧?2.*ListNodePtr s; 那这个s就是结构体哦?3.将1.中的结构体指针调用到其他函数时用指针好,还是指针的指针好?function_1(s)或function_2(&s);他们访问内存的区别? 我看书上是用的指针的指针,不知道有什么区别? 谢谢!!!
展开
1个回答
2013-09-17
展开全部
假设有以下代码:
ListNodePtr s;
*ListNodePtr p=&s;
**ListNodePtr pp=&p;
假设ListNodePtr s在内存中存放的地址为1000,p指向s,pp指向p,示意如下:
1000:s的内容
1005:p的内容=1000
1009:pp的内容=1005
即s的地址是1000,代表结构体的内存位置;p的地址是1005,p的值为1000指向s;pp的地址是1009,p的值为1005指向p(即指针的指针)。
故:
1. ListNodePtr s:s就是结构体的代表,并不是结构体指针,p才是结构体指针;
2. *ListNodePtr s:这里s才是结构体指针;
3. 传参时,用function_2(&s)或function_2(*s)可直接在函数中访问原结构体内容;用function_1(s)则会将结构体复制一份压到参数栈中,函数中访问的是复制的副本。看实际需要使用。
ListNodePtr s;
*ListNodePtr p=&s;
**ListNodePtr pp=&p;
假设ListNodePtr s在内存中存放的地址为1000,p指向s,pp指向p,示意如下:
1000:s的内容
1005:p的内容=1000
1009:pp的内容=1005
即s的地址是1000,代表结构体的内存位置;p的地址是1005,p的值为1000指向s;pp的地址是1009,p的值为1005指向p(即指针的指针)。
故:
1. ListNodePtr s:s就是结构体的代表,并不是结构体指针,p才是结构体指针;
2. *ListNodePtr s:这里s才是结构体指针;
3. 传参时,用function_2(&s)或function_2(*s)可直接在函数中访问原结构体内容;用function_1(s)则会将结构体复制一份压到参数栈中,函数中访问的是复制的副本。看实际需要使用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询