• 字符数组的定义与赋值


    今天写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还没有赋值的时候的值=======
    "); 
        printf("此时的str2相当于一个野指针,*str2是没有初始化的
    
    "); 
        printf("str1==%d,str2==%d
    
    
    ",str1,str2); 
        str2="welcome"; 
        printf("===========str2赋值后=====================
    
    "); 
        printf("str1==%d,str2==%d,str[1]==%c,str2[1]==%c,*str2==%s
    
    ",str1,str2,str1[1],str2[1],str2); 
        printf("&str1[1]==%d,&str2[1]%d",&str1[1],&str2[1]); 
        printf("
    
    以上两行打印可知,就算str1和str2代表的字符串内容是一样的,但是这两个所在的存储空间也是不一样的!
    
    "); 
        return 0; 
    }
    
     
    

      

    image

  • 相关阅读:
    JavaScript之MV*模式
    JavaScript之命名空间模式 浅析
    设计模式漫谈
    JavaScript之作用域与闭包详解
    JavaScript数据检测
    Code Conventions for the JavaScript Programming Language
    Javascript之对象的继承
    多线程,进程,协程用法
    scrapy_redis 实现多进程配置部分代码
    自己设计代理IP池
  • 原文地址:https://www.cnblogs.com/hhddcpp/p/4304573.html
Copyright © 2020-2023  润新知