C语言字符串常量和指针的关系

当一个字符串常量出现于表达式中时,它的值是一个指针常量。编译器编译的时候会把这些指定字符的一份拷贝存储在内存当中,并存储一个指向第一个字符的指针。

例:

cout << "abc" + 1;

第一次见到类似的表达式,以为是在一个字符串上执行某种类型的加法运算,但是当知道字符串常量实际上是个指针时,就明白这个表达式的意义了;"abc"指针最初指向’a',指针加上1后便由'a'指向了第二个字符'b',所以会打印出字符串"bc";

cout << *"abc";

对一个指针执行间接访问操作时,其结果就是指针所指向的内容。而字符串常量的类型就是“指向字符串的指针”,所以这个间接访问的结果就是指针指向的字符'a'。(这个表达式输出的结果并不是整个字符串,只是它的第一个字符,相当于使用指针访问值)

cout << "abc"[1];

使用此表达式同样可以访问字符串常量中的字符,虽然看着似乎有点不太合理

char *Str = NULL;

Str = "abc";
cout << Str;

在进行程序运算或进行其他字符操作的时候可以直接使用已声明的char* 变量指向一个字符串而不需要进行开辟内存。

总结:

        字符串常量实际上就是一个指针,编译器在编译的时候会自动把这些字符存储在内存的某个位置,在存字符串内容的同时,同样会存储一个指向第一个字符的指针。我们可以通过这个指针来访问字符串中的某些字符,也可以让其他指针指向字符所存储的位置

你可能感兴趣的:(c语言,c++,开发语言)