- 首先来看看常量字符串
首先对于表达式:
char * pc=“abcd”;
并不是把“abcd”放入pc中,而只是把“abcd”中‘a’的地址放入pc中,即当常量字符串出现在表达式中时,其值为首元素地址 再者常量字符串可以按照字符数组来看待,但此“数组”不可改变(能访问,不可修改)因此上述表达式更严谨的写法为const char * pc=“abcd”;接下来可以看看这个十分经典的题:
- 下面来看看字符数组的赋值
先说一个结论“不可以通过赋值运算符‘=’来对字符数组整体赋值”。看到这句话可能很多人会有疑问
我们常用的这种定义时的整体赋值 不是用到了‘=’吗,这里包含了一个知识点,在变量定义(或声明)中的初始化赋值中“=”不算赋值运算符。
下面来说说字符数组赋值的方法
- 1.定义时初始化赋值
如char arr[9]=“abcd”
- 2.逐个字符单独赋值
如char arr[9]={‘a’,‘b’,‘c’,‘d’};
- 3.利用字符串函数strcpy
如char arr[9];
strcpy(arr,“abcd”);
- 常见赋值错误操作
- 1.字符数组定义完后再进行赋值
针对上述例子如char arr[9]; arr[9]=“abcd”;首先此数组不包含下标为9的空间,再者一个数组元素也不能容纳一个字符串。
- 2.定义完字符数组后,用对应数组名来赋值
如char arr [9];arr=“abcd”这里是很常见的错误,错误原因: 字符数组定义后,arr指针已经指向堆栈中一个字节为9的空间,而“abcd”为一个常量字符串,由上述常量字符串内容可知常量字符串在内存中只会存储一份,此时arr指针已经指向自己的空间,不可能再指向常量字符串的空间,即指针出现指向混乱。
因此,针对这种情况可知,这种操作是被允许的:
char * arr;arr=“abcd”;这种情况中arr指向的空间还未确定,固然可以指向常量字符串“abcd”
- 最后再简单说说字符个数的统计
如str[]="abcd\n\123\xab";试问此数组有多少个字符。答案为7
这其中\_ _ _为八进制数字,表示一个字符;同样\x_ _为十六制数字,也仅表示一个字符故总字符数为7,虽然则个没有啥技术成分,只是想提醒下大家(自己当时就忘了)。
文章到这就结束了,如有错误,欢迎批评指正,谢谢大家。