经典问题:
char s1[]="hello";
char *s2="hello";
1、s1的值是放在栈上的,值是可以修改的,而hello是一个字符串常量放在静态存储区是不能修改的。
2、内存大小不一样
#include<stdio.h>
int main(){
char s1[]="hello";
char *s2="hello";
puts(s1);
puts(s2);
printf(""%ld %ld\n",sizeof(s1),sizeof(s2));
return 0;
}
3、无法返回局部变量的地址,栈上的值随着函数调用结束,内存已经回收了
上面这种编译器会报警,下面则不会