在C语言中
char * 是一个指针,char[]=‘dfsdf’;是一个char数组.
char * a = "string1";//指向常量的指针
char b[] = "string2";//初值为string2的数组
printf("a = %s,b=%s", a, b);
那么区别就清晰了,常量存放的位置:
对于局部常量,存放在栈区;
对于全局常量,编译期一般不分配内存,放在符号表中以提高访问效率;
字面值常量,比如字符串,放在常量区。
而常量区的内容是只读的。
char * 和char[]的初始化操作有着根本区别:
char *a = "Hello World";
char b[] = "Hello World";
printf("%s, %d\n","Hello World", "Hello World");//字符常量的地址
printf("%s, %d %d\n", a, a, &a);//指针a的值是字符常量的地址,指针a的地址
printf("%s, %d %d\n", b, b, &b);//数组的地址,数组的地址。

但是在c++ 中是不允许我们直接将字面常量赋值给指针,因为很容易导致泄露。
我们需要确保指针一直指向这个常量。
const char* p = "hello world";
作为函数的声明的参数的时候,char []是被当做char *来处理的(反正指向的都是首地址?):
void fun1(const char b[]){
std::cout << b <<std::endl ;
}
int main(){
const char *a=“HellowWorld”;
char b[] ="shi dai zai zhao huan";
fun1(a);
fun1(c);
return 0;
}

评论区