当前位置: 代码迷 >> C语言 >> C语言的一些关于&的基础有关问题
  详细解决方案

C语言的一些关于&的基础有关问题

热度:2054   发布时间:2013-02-26 00:00:00.0
C语言的一些关于&,*的基础问题
比如初始化堆栈的函数:
void InitStack(SqStack &S)
{
S.base = (int*)malloc(10*sizeof(int));
S.top = .....;
}


void InitStack(SqStack *S)
{
   ...

}


有什么区别呢?
第一个是传入了S结构体的地址吗?
那第二个呢?是传进去一个指向SqStack的指针吗?如果像第二种方法,怎样实现给栈指针分配空间?S->base?和第一种有什么区别?
第一个和C++中的引用有什么关系和区别?



------解决方案--------------------------------------------------------
第一个是引用,但不是传入地址,引用是一个别名,别名就是传入之后它的值可以修改,和指针一样可以修改值。
第二个传入指针,s->来赋值
------解决方案--------------------------------------------------------
楼主看下effective C++ ,里面有一条讲的是指针和引用的区别,还有就是引用只有C++里有。C是没有引用的和多态的。
------解决方案--------------------------------------------------------
引用:
比如初始化堆栈的函数:
void InitStack(SqStack &S)
{
S.base = (int*)malloc(10*sizeof(int));
S.top = .....;
}


void InitStack(SqStack *S)
{
   ...

}


有什么区别呢?
第一个是传入了S结构体的地址吗?
……

二者没有区别
第一个是引用,就是变量的别名,与指针形参一样,引用其实也是取的参数的地址,而后又通过“*”取值而来,在函数体中 通过“.”操作符调用成员
第二个传递的是变量地址 在函数中使用“->”调用成员函数
二者在效率上没有差别
编译后的反汇编码也是一样的
引用多用于函数形参
------解决方案--------------------------------------------------------
第一个是C++中的引用,虽然引用和指针都能达到相同的目的,
不过两者还是有区别的:指针灵活而功能强大,而引用限制很多,比指针规范安全。
------解决方案--------------------------------------------------------
那本数据结构(C++)写的真的很烂!

真的要学数据结构和算法,去看
Knuth, D.E的The Art of Computer Programming
  相关解决方案