python中变量和指针的区别_c指针和python的引用赋值之不同 | 学步园

以下是个c指针的例子:

#include

int main(){

int *ptr;

int val=10;

ptr=&val;

int xx=*ptr;

printf("%d",xx);

}

int *ptr是声明这是个指针变量,也即说明其作用就是存储其他变量的内存地址。

&val是取其内存地址,然后赋给指针变量ptr。

*ptr这个星号的作用是取这个地址所对应的内容,最后又赋给变量xx,最后打印出xx。

不同的地方首先是这个:

int val=10,,对于c语言来说,其实是在栈里头开辟一个内存,内容是10,这块内存的名字叫做val。。。

而在python或者javascript里,如果int val=10,则是

所以在这2种语言里,val本身就是指针,它并不是对象3这块内存的名字。如果在c语言里val本身就是指针,那就没必要那么麻烦,还专门搞出一个指针的概念来。

所以在c语言里,int xx=*ptr的意思就是,在栈里开辟一块名为xx的内存,然后存储*ptr的内容10..

结论是:

因此int val=10在python或者javascript里更象两块内存之间通过某种叫引用的东西建立了联系,仍然是2个东西,而在c语言里是内存的名字去对应内存的内容,本质是1个东西。

在c语言里,只有声明过的指针变量才能存储内存地址 ,如我们上面例子看到的int val=10,int xx=*ptr,都说明普通变量都是在存储实际的内容,而只有ptr=&val在存储地址。

而python/js这样的语言则比较随意,任何一个普通变量都可以存储内存地址,因为它们都是指针。

如,一个引用变量赋值给另一个变量就是将引用变量存储的内存地址(引用变量自己就是一个指针,指向的是某一份堆内存里头的内容)复制一份给新的变量。

补充:

#include

int main(){

int foo=123;

int *ptr=&foo;

printf("%d",*ptr);

}

c语言使用指针的时候,这个星号有两重用途:

定义指针变量的时候要用星号,如int *ptr,

使用的时候要用星号来取指针变量指向的内容,如printf("%d",*ptr)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值