字符串char的用法

发布时间 2023-12-07 15:46:09作者: 玩硬件的LLC

char* char a[] 的详解

char*

char*p,表示p是指向字符串的指针

这是个指针变量,只占四个字节,32位,用来保存一个地址。

char a[]

表示的是一个字符串数组, a代表字符串的首地址

char* get_str1()
{
  char str[] = {"abcd"};
  return str;
}
char* get_str2()
{
  char *str = {"abcd"};
  return str;
}
在函数get_str1中,char str[] = { "abcd" },定义的是一个局部变量,该函数返回的是内部局部字符数组str的地址,当函数调用之后该数组被销毁,所以返回的指针是一个已经释放了空间的指针,指向的值不定。

在函数get_str2中,char* str = { "abcd" },先定义一个字符串常量“abcd“,再将指针str指向它,返回值是这个指针,由于字符串常量在编译时分配内存,只有程序退出时才被销毁,所以返回它的地址没有问题。

1)char s[5];
s = "abcd";   //错误

2)char *s;
s = "abcd";   //正确
1编译不通过但是2编译通过。这是因为在1中,s是数组名,当成是常量指针,不可以作为左值修改;而2中s是一个指针变量,可以将其指向一个字符串常量。

char * 与 char a[] 的本质区别:

当定义 char a[10] 时,编译器会给数组分配十个单元,每个单元的数据类型为字符。

定义 char *s 时, 这是个指针变量,只占四个字节,32位,用来保存一个地址。

sizeof(a) = 10 

sizeof(s)  = ?

当然是4了,编译器分配4个字节32位的空间,这个空间中将要保存地址。

printf("%p",s);

这个表示 s 的单元中所保存的地址。

printf("%p",&s);

这个表示变量本身所在内存单元地址,不要搞混了。

用一句话来概括,就是 char *s 只是一个保存字符串首地址的指针变量, char a[] 是许多连续的内存单元,单元中的元素为char 。

之所以用 char *能达到char a[]的效果,还是字符串的本质,地址。即给你一个字符串地址,便可以随心所欲的操作他,但是,char *和char a[]的本质属性是不一样的。

深入理解char * ,char ** ,char a[ ] ,char *a[] - Z--Y - 博客园 (cnblogs.com)

[(C++)三种常用的字符串表示方法——char* 和 char] - 小念子 - 博客园 (cnblogs.com)