c,c++和python变量讨论
来源:互联网 发布:元数据 数据字典 区别 编辑:程序博客网 时间:2024/04/29 21:31
c,c++为编译型语言,又称静态语言。变量的类型在编译时就确定了,并且分配了相应的内存空间,一定程度
上,变量就代表了这块内存空间,就像人名一样。Python为动态类型语言,变量只是一个名称而已,
不代表某个内存空间。
C语言中,变量就相当于一个盒子,盒子的名字就是变量,无论盒子里的内容怎么变,盒子及其名称一旦
确定(编译时),就不可再更改。C++亦是如此,但是c++同时也引入了引用的概念,引用不是普通的变量,
它是一个的别名,一个对某个内存空间的引用。由于c++是静态语言,所以一旦对某个内存空间绑定过后,引用就不可改变。Python中,变量全部是一个引用,一个对某个内存的引用
,是别名,加上其动态性的特点,所以变量可以绑定(bind)不同的内存空间。
三种语言的不同根本在于变量存储方式的不同(如上所说),从而导致其他方面的差异。
比如函数传值带来的差异:
比如对于函数:
void foo(int a) /* c/c++ */
void foo(int &a) // c++
def foo(a) # python
)在调用foo(b)时,变量b的值被拷贝到栈中,并被赋给函数的局部变量a,然后无论局部变量a怎么改变,
对原来的b没有丝毫影响。
2)调用foo(b)时,变量b的别名被赋给a,这样a也就是了b的别名。函数体里对a的改变,直接影响到b的值。
函数结束时,a变量自动销毁。(下面函数体里的注释,是在调用函数时的情况)
3)调用foo(b)是,变量b被赋给a,a,b都是一块内存的别名,在函数体里,如果改变a的值,就要分情况讨论了
如果a引用的是不可变(immutable)对象,那么改变a,使得a绑定到另外一个内存,而对b及其绑定的对象
没有影响;
如果a引用的是可变(mutable)对象,而且又对a实施索引修改等操作(也就是对原内存进行修改),那么改变的
就是a,b所共同指向的那个内存空间,b所引用的空间内容就改变了,否则,a绑定到了另外一个内存空间,对a无影响。
在函数结束时,a被垃圾回收机制销毁,不复存在。
- c,c++和python变量讨论
- 关于C语言变量和函数命名总结以下几点,大家可以讨论交流一下:
- C#-变量和常量
- C/C++中变量及函数命名的讨论
- C/C++中结构体变量字节对齐讨论
- 关于C语言交换两个int类型变量的讨论
- C++/C枚举量的使用和讨论
- 【C语言】C语言常量和变量
- 【C语言】【unix c】变量和常量
- 关于C的讨论
- C语言趣味讨论
- 【C】【unsigned char讨论】
- C语言中变量和变量地址
- C语言静态变量和参数变量
- 局部变量和成员变量(C#)
- pro*c宿主变量和指示变量
- C中auto变量和static变量
- C语言变量和数据类型
- 备注
- ajax 跨域请求
- 安装交叉编译器
- ExtJs_表单与输入控件
- LINQ 查询介绍
- c,c++和python变量讨论
- jdk16_23/24 bug
- 程序员基础 MySQL数据库开发必备常识
- VHDL数据类型转换
- 今天遇到一个奇怪的问题 android:sharedUserId有关
- NorFlash和NandFlash区别
- 初来CSDN
- 如何运行APUE中的代码?
- 防止重复提交