变量名和变量地址之间是什么关系?
变量名是高级语言定义的一种东西,主要用来方便的寻址变量。在编译过程中,每个变量都有一个变量名,每个名对应一个应用,也就是变量的第一个字节地址。
也就是说,变量名与其地址是一一对应的映射关系。但是编译后变量名是不存在的,所以C必须有一个机制来区分与形式相似的变量名和真实地址。
对于变量A,不加意味着取A的值,加意味着取A在内存中的地址,后一个值只能赋给指针变量。其实后来发现这种设计有一些弊端,这也是为什么Java,C#删除了它们的区分,统一使用引用(和指针略有不同,但机制是一样的)。
地址符的作用,地址符是什么意思?
地址提取的功能是告诉系统定义的变量,该值存储在内存空间中。scanf函数根据这个地址值寻址,然后从这个地址空间中取出我需要的数据值。对于变量来说,变量在内存中的地址只能通过ampa获取,而对于指针变量和数组来说,不需要这种地址获取。
C语言的指针不是地址吗?为什么地址还要区分类型?指针的加法也好难,该怎么理解呢?
类型描述了指向内容的指针的数据长度。为了让你不不正确地操作内容,C语言编译器正在检查类型。
当然,如果能保证逻辑和内容长度的正确性,也可以在C语言层面强制转换成另一种指针类型。
在汇编语言中,没有内容的类型,只有内容的长度。连内容的整数符号都没有说清楚,整数的符号体现体现在操作数据的不同机器指令中。
C语言中指针类型的不同只是为了防止你在语法层面容易出错。