指针数组那个数组名属于指针吗
1个回答
展开全部
数组名只在源代码中有意义,因此在源代吗环境中或者说编译时才有意义(已经编译完成的可执行程序中只有地址),这时候,编译器会为所有数据实体创建映射表“标识符-地址”,包括变量、数组、对象、结构、函数体,以便于当遇到某个变量时可以转换为地址,同时在方便调试跟踪。
如果编译时为DEBUG模式,则这些表和其他额外数据作为调试参数包含在目标程序中,而如果编译为release版本,不包含这些信息。
因此从编译角度说,任何变量名都是指针,所以指针数组名当然也是指针,最简单的int a,这个“a”本身也是个指针。当访问任何变量时,编译器会安排先取地址,然后根据变量类型决定是否进一步取值,即隐式转换。
比如访问普通变量时,编译器默认操作为取值,因此,当int b=a时,则是先取a和b的地址,再取a的值写入b的内存中,如果要取a的地址,则需要显式转换即int *p=&a;,这样编译器就取了a的地址后直接赋值给p了,而不会进一步操作。而如果a为数组,遇到int *p=a;编译器取完地址后直接赋值给p,而不会做进一步操作。
总结:
1、数据实体:源代码中所有变量、数组、对象、结构、链表。。。函数体,一切可访问资源。
2、任何数据实体都有地址
3、编译器访问数据实体时,必须先定位,也就是必须取得地址
4、普通变量取值,数组取地址都是编译器设计好的隐式转换。
如果编译时为DEBUG模式,则这些表和其他额外数据作为调试参数包含在目标程序中,而如果编译为release版本,不包含这些信息。
因此从编译角度说,任何变量名都是指针,所以指针数组名当然也是指针,最简单的int a,这个“a”本身也是个指针。当访问任何变量时,编译器会安排先取地址,然后根据变量类型决定是否进一步取值,即隐式转换。
比如访问普通变量时,编译器默认操作为取值,因此,当int b=a时,则是先取a和b的地址,再取a的值写入b的内存中,如果要取a的地址,则需要显式转换即int *p=&a;,这样编译器就取了a的地址后直接赋值给p了,而不会进一步操作。而如果a为数组,遇到int *p=a;编译器取完地址后直接赋值给p,而不会做进一步操作。
总结:
1、数据实体:源代码中所有变量、数组、对象、结构、链表。。。函数体,一切可访问资源。
2、任何数据实体都有地址
3、编译器访问数据实体时,必须先定位,也就是必须取得地址
4、普通变量取值,数组取地址都是编译器设计好的隐式转换。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询