char字符串常量的神秘

    xiaoxiao2024-04-22  8

    1.字符串常量不像 字符 一样可以是空 以为NUL  即 "\0"  在内存中 占位子

    2.指针常常和字符串常量一起  程序中使用字符串常量会产生一个   "指向字符的指针"   表达式所使用的值就是这些字符所存储的地址,而不是字符本身

            所以    可以            char *p="字符串常量" (*p 指向字符所存储的地址) 

                      不可以           数组=字符串常量     以为字符串常量的  直接值   是一个指针  而不是  字符本身

                       但                   array[]="124566" ;   以这种形式初始化数组  实际上是  一个初始化列表  即   array[]={'1','2','3','4','5'};

                         初始化字符数组时它相当于一个 初始化列表  其他时候 都是 字符串常量      

    详情 看代码

    1. #include int main() { char *ss="012345"; printf ("%s\n",*ss); return 0; } 1.c:4:6: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=] printf ("%s\n",*ss); gcc编译器报错 说明 ss 所指的内容不 可以用 %s的格式打印 #include int main() { char *ss="012345"; printf ("%d\n",*ss); return 0; } root@ct-VirtualBox:~/code# gcc -o c 1.c root@ct-VirtualBox:~/code# ./c 48 48 是 '0' 的十进制ASCII码 *ss指的是字符串的第一个字符 使用cout的不存在这个问题: #include using namespace std; #include int main() { char *ss="cghb"; cout<<*ss< int main() { char *ss="012345"; printf ("%s\n",ss); return 0; } root@ct-VirtualBox:~/code# gcc -o c 1.c root@ct-VirtualBox:~/code# ./c 012345 说明ss 指针本身值字符串 #include int main() { char *ss="012345"; printf ("%d\n",*(++ss)); return 0; } root@ct-VirtualBox:~/code# gcc -o c 1.c root@ct-VirtualBox:~/code# ./c 49 #include int main() { char *ss="asdfg"; printf ("%d\n",++(*ss)); //`````````` printf("%c\n",*(++s));可以得出s *ss是一个字符串常量 是不可以修改一个常量的值 return 0; } root@ct-VirtualBox:~/code# ./c Segmentation fault (core dumped) 要区别:#include int main() { char s[]="asdfg"; //````````````注意这里是 数组 数组是一段连续的存储空间 它当前位置的值是可以改变的; printf("%c\n",++*s);//这是可以打印出 'b' 的 return 0; } ++ --俩个操作符 都需要一个 变量 作为 操作符 而不是常量 即需要 左值 *ss 是48 是int 常量     

    3.要修改字符串   最好把它      存储在数组中

    /***********************************************关于代码中的问题好像找到答案了***********************************************************/          

       来自:http://blog.csdn.net/yahohi/article/details/7427724

                     

    这里的char ch[]="abc"; 表示ch 是一个足以存放字符串初值和空字符'/0'的一维数组,可以更改数组中的字符,但是char本身是不可改变的常量。 char *pch = "abc"; 那么pch 是一个指针,其初值指向一个字符串常量,之后它可以指向其他位置,但如果试图修改字符串的内容,结果将不确定。 ______ ______ ______ ch: |abc\0 | pch: | ◎-----> |abc\0 | ______ ______ ______

    转载请注明原文地址: https://ju.6miu.com/read-1288246.html
    最新回复(0)