字符串数组名代表什么
答案:1 悬赏:30
解决时间 2021-02-21 23:14
- 提问者网友:
- 2021-02-21 10:20
字符串数组名代表什么
最佳答案
- 二级知识专家网友:人间朝暮
- 2021-02-21 11:37
答对了。
其实任何变量的名称代表的都是变量地址,这点学校和教科书不会说的。
举例
int a,b=10;
a=b;
将b赋值给a的操作细节是:
取a和b的地址(直接寻址)
取将b地址中的值
复制保存到a的地址中。
对于普通变量(单个变量),包括指针变量,编译器遇到赋值运算会自动取值,这叫隐式转换。
而对于数组,如果只给出数组名,编译器不会直接取第一个元素,因为它无法确定你要取第几个元素,因此编译器不会自动处理(取值),返回的就是数组名的地址,也就是第一个元素的地址。
而只有当你指定一个索引,才相当于普通变量的取值,而取值过程是:
先取数组地址,在利用索引计算元素位置,然后取值。
因此对于数组a,使用数组名时, int *p=&a 和 int *p=a效果是一样的,前者是显式访问,后者是隐式访问。
C++难,我觉得不仅仅是难在指针上,而是很多隐含的自动转换,因为很多隐式转换不同编译器处理不同,所以让很多初学者很头痛。
其实任何变量的名称代表的都是变量地址,这点学校和教科书不会说的。
举例
int a,b=10;
a=b;
将b赋值给a的操作细节是:
取a和b的地址(直接寻址)
取将b地址中的值
复制保存到a的地址中。
对于普通变量(单个变量),包括指针变量,编译器遇到赋值运算会自动取值,这叫隐式转换。
而对于数组,如果只给出数组名,编译器不会直接取第一个元素,因为它无法确定你要取第几个元素,因此编译器不会自动处理(取值),返回的就是数组名的地址,也就是第一个元素的地址。
而只有当你指定一个索引,才相当于普通变量的取值,而取值过程是:
先取数组地址,在利用索引计算元素位置,然后取值。
因此对于数组a,使用数组名时, int *p=&a 和 int *p=a效果是一样的,前者是显式访问,后者是隐式访问。
C++难,我觉得不仅仅是难在指针上,而是很多隐含的自动转换,因为很多隐式转换不同编译器处理不同,所以让很多初学者很头痛。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯