关于*&的问题

tommaomao233 2011-12-04 10:17:17

#define MaxSize 50;

//用到的结构体
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;

//初始化线性表

void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L->Length=0;

}



请问 这里的*&是个什么意思呢?
...全文
267 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
小默 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 sanjiuailuoluo 的回复:]
不是迷信啊 有时候 自己的思路短路或者有什么不懂 问问大家说不定就明白了呢 而且有时是最快捷的方式
[/Quote]
额。。。那段话我已经在N多地方见过他发来,请忽略。
tommaomao233 2011-12-06
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 wshjldaxiong 的回复:]

引用 33 楼 sanjiuailuoluo 的回复:
不是迷信啊 有时候 自己的思路短路或者有什么不懂 问问大家说不定就明白了呢 而且有时是最快捷的方式

额。。。那段话我已经在N多地方见过他发来,请忽略。
[/Quote]

哈哈
tommaomao233 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 imstyle1001 的回复:]

C里面的&符号只是用来作为取地址运算符,C++出了取地址,还能作为一种参数传递的方式,引用传递;
引用传递可以保证你对形参的改变同时作用到实参,*& 的作用可能是想对传进来的指针的改变在函数返回时能保存,如果不使用引用只是使用指针,在最后返回的时候可能还是运来的状态
[/Quote]

嗯 觉得你说的有一定道理 没有学C++ 看来该是在C++中的用法吧 在C里面好像说不太通
tommaomao233 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vilnies 的回复:]

看来好多人都误解这个SqList *&L了,

看成SqList **L是错误的

引用的概念就是一个对象的另一个名称。

SqList * (&L), L还是一个SqList *类型
[/Quote]


SqList * (&L), L是一个SqList *类型 —>这句话怎么说???
tommaomao233 2011-12-05
  • 打赏
  • 举报
回复
嗯 看了各位的说法 也看了C的书



其实这是数据结构书上的程序片段

我没学C++ 不是很清楚具体该是C还是C++ 或者在C++里怎么用


根据C的书 &L就是取了一段内存空间的地址 而*(&L)指的是内存单元中放的数据


那么 感觉 SqList *&L 就有点说不通

SqList 是一个结构体变量 而*&L 是一个内存中的数据 ?


elegant87 2011-12-05
  • 打赏
  • 举报
回复
指针的引用 说明这个指针是可以改变的

类似下面这种写法



//用到的结构体
typedef struct
{
char data[50];
int length;
}*SqList;

//初始化线性表
void InitList(SqList &L)
{
L=(SqList *)malloc(sizeof(SqList));
L->length=100;
}

int main()
{
SqList *temp;
InitList(temp);
cout<<temp->length<<endl;
return 0;
}

simple_blue 2011-12-05
  • 打赏
  • 举报
回复
C里面的&符号只是用来作为取地址运算符,C++出了取地址,还能作为一种参数传递的方式,引用传递;
引用传递可以保证你对形参的改变同时作用到实参,*& 的作用可能是想对传进来的指针的改变在函数返回时能保存,如果不使用引用只是使用指针,在最后返回的时候可能还是运来的状态
woshierjian 2011-12-05
  • 打赏
  • 举报
回复

int main()
{
SqList *temp; //首先定义指针变量,指针没有分配空间,指针指向的是一非法空间
InitList(temp); //传递SqList *类型的引用过去,就是把temp本身传入,为temp开辟空间,赋值
//若为InitList(SqList *)类型,就是把指针temp值拷贝(复制了一个temp),执行完InitList()函数后,main()函数中的temp没有任何变化,还是指向一片非法空间
cout<<temp->length<<endl;
return 0;
}
hu7324829 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wshjldaxiong 的回复:]
如果楼主写的是纯C代码,那么这么写是不对滴。只有C++里有这种用法。
[/Quote]
对 只有c++能这么写.
因为c里面没有引用。
woshierjian 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vilnies 的回复:]
看来好多人都误解这个SqList *&L了,

看成SqList **L是错误的

引用的概念就是一个对象的另一个名称。

SqList * (&L), L还是一个SqList *类型
[/Quote]
有道理!
小默 2011-12-05
  • 打赏
  • 举报
回复
如果楼主写的是纯C代码,那么这么写是不对滴。只有C++里有这种用法。
tommaomao233 2011-12-05
  • 打赏
  • 举报
回复


[Quote=引用 34 楼 taodm 的回复:]

楼主又被那本用伪码而不是真正的C代码写的“数据结构”的教材给祸害了。
建议换书。
[/Quote]

唔 那你知道有哪些好点呢? = =
vilnies 2011-12-05
  • 打赏
  • 举报
回复
看来好多人都误解这个SqList *&L了,

看成SqList **L是错误的

引用的概念就是一个对象的另一个名称。

SqList * (&L), L还是一个SqList *类型
  • 打赏
  • 举报
回复
上面有点问题

typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;

void InitList(SqList *L)
//SqList InitList(SqList L)




或者

typedef struct
{
ElemType data[MaxSize];
int length;
}*SqList;

SqList InitList(SqList L)
//void InitList(SqList *L)

tommaomao233 2011-12-05
  • 打赏
  • 举报
回复
多谢各位 很多筒子是对的啦 都看啦 学习了 结贴 (*^__^*)
taodm 2011-12-05
  • 打赏
  • 举报
回复
楼主又被那本用伪码而不是真正的C代码写的“数据结构”的教材给祸害了。
建议换书。
tommaomao233 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 zhao4zhong1 的回复:]

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针……
[/Quote]

不是迷信啊 有时候 自己的思路短路或者有什么不懂 问问大家说不定就明白了呢 而且有时是最快捷的方式


tommaomao233 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 wshjldaxiong 的回复:]

而引用的作用,简单来说:如果你不以引用的方式传递参数(也就是我们最常用的方式),那么参数传过来之后你爱怎么改怎么改,不会影响到主函数中那个变量的值(指针操作需要特别理解),而以引用的方式传过来之后,你改了,主函数中那个变量的值也会跟着变。

建议楼主暂时不要深究这个问题,先把C学扎实,否则不利于你的学习。
[/Quote]

嗯嗯 我感觉你的这段话是关键 ->就是*&到底是个什么用处啦 大概能理解了 多谢昂 = =

  • 打赏
  • 举报
回复

typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;

void InitList(SqList **L)
//SqList *InitList(SqList *L)

liustone1263027102 2011-12-05
  • 打赏
  • 举报
回复
#define MaxSize 50;

//用到的结构体
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;

//初始化线性表

void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L->Length=0;

}

L是SqList *型变量,&L是L变量的地址,SqList *&L等效与SqList L.
加载更多回复(18)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧