返回信息流举例:
int main(int argc,char** argv)
{
char str1[]={"hello"};
char *str2=str1;
printf("%c\n",str1[1]);
printf("%c\n",*(++str2));
return 0;
}
如果我没理解错的话,面试官的意思是说要输出字符'e',
用数组名str1[1]的方式取,和用指针*(++str2)的方式取有什么区别?
我觉得没区别,数组名也是指针嘛。
求解释,人家的用意究竟在哪呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #45093同步于 2010/10/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
数组名和指向数组的指针的区别
salooloo
2010/10/22镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
数组名和指针之间有一个不同之处,指针是一个变量,因此,在C语言中,语句str2=str1和str2++都是合法的。但是数组名不是变量,因此,类似于str1=str2和str1++形式的语句是非法的。还有就是(一般涞说)用指针编写的程序比用数组下标编写的程序执行速度快。
char str1[]={"hello"};
char *str2;
str2=str1; /*等价于str2=&str1[0]*/
【 在 ericyosho 的大作中提到: 】
: 不知道啥用意,你就说str1就不能++了。
: --
是不是因为数组的寻址方式是起始地址加偏移量才慢啊?
指针方法的优点是,数组的地址每次装入地址str2后,在每次循环中只需对str2增量操作。在数组索引方法中,每次循环中都必须根据下表 i 值求数组下标的复杂运算