c变量名 疑问

在c语言教材上看到一句话,觉得说的挺好。


变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。


也就是说,变量名对应一个地址,而这个地址是在编译链接后就确定了的,也就是说,在运行时,不能改变变量名的地址。
这应该就是动态内存分配函数需要返回指针的原因,因为动态内存函数分配的内存是在运行时才确定的,显然不能用无法改变地址的变量名来保存这个地址,所以要返回指针,然后用指针变量保存。
指针变量的内容,即它指向的地址,是可以改变的。
指针变量名代表的地址,即存放指针变量( (指向的地址)的内存单元)的地址,在运行之前就已经确定了,是无法改变的。
(上面的括号代表断句)


疑问:
如果变量名对应的地址在分配链接时确定,那么局部变量呢?局部变量时存储在栈中的,那局部变量名对应的地址应该是栈中的地址,可是,栈中的地址不是要等运行时才能知道吗?那怎么在编译链接时就能给局部变量名分配地址了?是分配的相对地址吗?

发布了111 篇原创文章 · 获赞 13 · 访问量 3126

猜你喜欢

转载自blog.csdn.net/wx_assa/article/details/103492047