C语言字符串常量-CSDN博客

66 阅读1分钟

C语言字符串常量

一.字符串常量的声明

char *p = "hello";//指针直接往上戳

一个字符串常量为什么会给一个指针赋值? 字符串常量是一个表达式,既然使表达式就会有值,字符串常量的值是该字符串第一个字母的首地址

同一个字符串常量,它们的值(地址)相同


   
   

     
     

      
      

     
     

     
     

      
      

       
       #include <stdio.h>
      
      

     
     

     
     

      
      

     
     

     
     

      
      
 
      
      

     
     

     
     

      
      

     
     

     
     

      
      

       
       int main(void){
      
      

     
     

     
     

      
      

     
     

     
     

      
      
 
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       char *p = 
       
       "hello";
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       char *q = 
       
       "hello";
      
      

     
     

     
     

      
      

     
     

     
     

      
      
 
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       printf(
       
       "%p\n%p", p, q); 
      
      

     
     

     
     

      
      

     
     

     
     

      
      
 
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       return 
       
       0;
      
      

     
     

     
     

      
      

     
     

     
     

      
      

       
       }
      
      

     
     

   
   

注意,上面的例子中使用了不同的指针指向同样内容的字符串常量,输出的结果却一样,这就说明多次使用同样内容的字符串常量,在内存中,都只保存一次该字符串常量。

结论:字符串本身是有值的,就是第一个字符的地址。

因为它的值是地址,所以可以这样用


   
   

     
     

      
      

     
     

     
     

      
      

       
       #include <stdio.h>
      
      

     
     

     
     

      
      

     
     

     
     

      
      
 
      
      

     
     

     
     

      
      

     
     

     
     

      
      

       
       int main(void){
      
      

     
     

     
     

      
      

     
     

     
     

      
      
 
      
      

     
     

     
     

      
      

     
     

     
     

      
      
 
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       printf(
       
       "%p\n", 
       
       "hello");
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       printf(
       
       "%p\n", 
       
       "hello" + 
       
       1);
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       printf(
       
       "%c\n", *(
       
       "hello" + 
       
       1));
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       printf(
       
       "%c\n", 
       
       "hello"[
       
       1]);
      
      

     
     

     
     

      
      

     
     

     
     

      
      
 
      
      

     
     

     
     

      
      

     
     

     
     

      
      
    
       
       return 
       
       0;
      
      

     
     

     
     

      
      

     
     

     
     

      
      

       
       }
      
      

     
     

   
   

二.注意事项

1.字符串常量和字符数组不同,无法通过下标(指针间接引用)来直接修改
2.如果要修改字符串的值,我们只能使用字符数组的形式来存储字符串,可以这样声明:char str[] = "hello";,这样就可以修改了,它两本质上的不同是存储的位置不同。