请问一下 关于C语言的"引用"的疑问
请教一下 关于C语言的"引用"的疑问
struct List { int length; };
void clear(List list){
list.length = 0;
}
int main(){
printf("The list length is %d.\n", list.length); /// 2
clear(list);
printf("The list length is %d.\n", list.length); /// 2
return 1;
}
为什么上面,结构体变量,不是引用么?为什么不会改变值本身呢? 我知道用使用指针可以改变。但是想请教上面这个现象是为什么?这是不是引用么?
------解决方案--------------------
C语言里面没有引用的概念,C++里面才有。你的这种情况,编译器是通过在寄存器或者堆栈中建立临时数据来传递它的,但是说到底也是传值。(参考这个:http://blog.chinaunix.net/uid-11238496-id-2894352.html)
如果你希望改变结构体的值,在C下面只能传它的指针进去(引用在某种意义上其实就是一个指针常量,即指针自身的值不能改变,但是指向的内容可以改变)
struct List { int length; };
void clear(List list){
list.length = 0;
}
int main(){
printf("The list length is %d.\n", list.length); /// 2
clear(list);
printf("The list length is %d.\n", list.length); /// 2
return 1;
}
为什么上面,结构体变量,不是引用么?为什么不会改变值本身呢? 我知道用使用指针可以改变。但是想请教上面这个现象是为什么?这是不是引用么?
c语言
指针
结构
------解决方案--------------------
C语言里面没有引用的概念,C++里面才有。你的这种情况,编译器是通过在寄存器或者堆栈中建立临时数据来传递它的,但是说到底也是传值。(参考这个:http://blog.chinaunix.net/uid-11238496-id-2894352.html)
如果你希望改变结构体的值,在C下面只能传它的指针进去(引用在某种意义上其实就是一个指针常量,即指针自身的值不能改变,但是指向的内容可以改变)
void clear(List *plist){
plist->length = 0;
}