侧边栏壁纸
博主头像
赵东阳的个人网站

行动起来,活在当下

  • 累计撰写 20 篇文章
  • 累计创建 8 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
C++

char* 和char[]

温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在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);//数组的地址,数组的地址。

image-20220315141023172

但是在c++ 中是不允许我们直接将字面常量赋值给指针,因为很容易导致泄露。

image-20220315140746325

我们需要确保指针一直指向这个常量。

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;
}

image-20220315144746450

0

评论区