字符数组的定义与赋值
今天写c程序时遇到这样的编译问题
char str [10]; 
str [] ="welcome";
报语法错误
char str [10]; 
str="welcome";
也报语法错误
这是为什么呢?
如果是其它的变量,比如:int a=1; 
可以分写成两个表达式: 
int a; 
a=1; 
可是字符数组 char str []="welcome"; 
就不可以写成:
char str [10]; 
str [] ="welcome";
最后的解释是:
 char str [10]; 
这条语句执行后,str是一个常量,指向开辟的空间的首地址。 
str [] ="welcome";  
这句的 str[] 这样引用本身就是不对的,只有在定义时才能这样: 
char str[]="welcome"; 
int a[]={3,4}; 
其它地方array[]是非法的。
如果改成这样: 
str="welcome"; 
还是不对,因为此时str是一个常量,你不能给一个常量赋值。
但是如果这样定义: 
char *str; 
然后就可以这样用了: 
str="welcome";
可是好像又不能看懂了,为什么这里就可以”str="welcome";”了呢?
其实这句话表示将“welcome”字符串的首地址赋值给str,再解释就是:先将welcome放在一片内存空间里,然后把这片内存空间的首地址给str。
在程序里面,指针所在的空间和字符串所在空间是不一样的~、
用一段代码看看char str1[]="welcome";和 char *str2;str2=”welcome”;的区别
- 
        
         
        
        
         
          #include "stdafx.h" 
         
        
- 
        
         
        
        
         
          #include "string.h" 
         
        
- 
        
         
        
        
         
          #include "stdio.h"
         
        
- 
        
         
        
        
          
         
        
- 
        
         
        
        
         
          int main(int argc, char* argv[]) 
         
        
- 
        
         
        
        
         
          {   
          char str1[]=
          "welcome"; 
         
        
- 
        
         
        
        
             
          char *str2; 
         
        
- 
        
         
        
        
             
          printf(
          "===========str2还没有赋值的时候的值=======\n"); 
         
        
- 
        
         
        
        
             
          printf(
          "此时的str2相当于一个野指针,*str2是没有初始化的\n\n"); 
         
        
- 
        
         
        
        
             
          printf(
          "str1==%d,str2==%d\n\n\n",str1,str2); 
         
        
- 
        
         
        
        
         
              str2=
          "welcome"; 
         
        
- 
        
         
        
        
             
          printf(
          "===========str2赋值后=====================\n\n"); 
         
        
- 
        
         
        
        
             
          printf(
          "str1==%d,str2==%d,str[1]==%c,str2[1]==%c,*str2==%s\n\n",str1,str2,str1[
          1],str2[
          1],str2); 
         
        
- 
        
         
        
        
             
          printf(
          "&str1[1]==%d,&str2[1]%d",&str1[
          1],&str2[
          1]); 
         
        
- 
        
         
        
        
             
          printf(
          "\n\n以上两行打印可知,就算str1和str2代表的字符串内容是一样的,但是这两个所在的存储空间也是不一样的!\n\n"); 
         
        
- 
        
         
        
        
             
          return 
          0; 
         
        
- 
        
         
        
        
         
          }
         
        
- 
        
         
        
        
          
         
        
- 
        
         
        
        
          
         
        
 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号