- 论坛徽章:
- 0
|
原帖由 whyglinux 于 2006-12-17 17:28 发表
>> 指针需要访存,取出存放在指针变量中的内容,解释成地址再使用。
这只适用于指针变量。对于指针常量(如 null 指针常量)以及由表达式计算得到的指针值不需要访问内存。
>> 而数组本身就是地 ...
我已经在另一篇帖子中指出我们对指针定义的分歧了。这里我就不争论了。
>>这只适用于指针变量。对于指针常量(如 null 指针常量)以及由表达式计算得到的指针值不需要访问内存。
好,常量不说了。但表达式计算是需要访存的。
例如:
- char *ptr1;
- char *ptr2;
- char a[3] = {'1',;2',;3'};
- ptr = a;
- ptr2 = ptr1 + 1;
复制代码
在执行ptr2=ptr1+1这个计算时,第一条指令就是取ptr1的值,再加1存入ptr2中去。如果版主有不需要访存的指针表达式计算,请给出c代码和反汇编。
>>“数组是地址”和“数组是指针”这两种说法是等同的。如果数组是地址的话,你怎么解释对一个数组对象的取址操作?解释为取地址的地址吗?
对数组名的&操作只是返回数组首元素的地址,你不能因为可以是用这个操作就说数组名不是地址。并且&操作不是只能用于变量取地址。例如:
- char *str = &"hello,world";
- printf("%p\n", "hello,world");
- printf("%p\n", str);
复制代码
>>再强调一遍,数组对象解释为数组类型还是指针类型(即地址)是由其在表达式中所处的上下文环境决定的,即取决于是左值语义还是右值语义。没有任何前提条件的时候,你不能确定“数组是作为数组类型使用”还是“数组是作为指针类型使用”。
数组就是数组,指针就是指针,只是有时候两者行为相似。版主你可以给个例子,不告诉我任何前提条件,只告诉我这是个数组还是指针,然后给出操作,如果我不能确定操作如何进行,我就赞同你上面的观点。 |
|