• C声明和初始化和赋值


    c语言的数据结构的声明 和 初始化

    简单一句话总结,在数据类型 声明的时候,如果同时给这个变量赋值,这个时候就叫初始化。
    如果声明的时候,没有给变量提供初始化。后面无论如何操作都不能叫做初始化了,只能给这个变量做赋值操作了。

    典型的就是字符串和数据,结构。

    如普通数据类型

    int a =3; // 声明变量a的同时,提供初始化操作。

    int b;
    b = 2; // 这个叫赋值操作,不叫初始化。

    如数组

    int a[] = {1, 2, 3, 4}; //声明数组a,并且提供初始化。

    int b[10];
    b[1] = 233; 这个叫做赋值。

    数组和字符串,这里有点东西

    char a[] = {‘a’, ‘b’, ‘c’, ‘d’}; //声明字符数组a,提供初始化,注意里面是单引号。好像c语言唯二个用单引号的地方;

    char b[] = “hello world”; //声明字符数组b, 提供初始化。注意这里貌似 “hello world” 是字符串常量,但是在这里初始化的表达式里面,就把这个“hello world” 打散,一个字符一个字符的装入字符数组b.

    char b[10]; // 如果不提供初始化,就要指定长度, 无论是显式的指定还是隐式的指定。
    b[2] = ‘x’; // 给b的第二位 赋值;另一个单引号在这里用。如果是双引号表示的是两个位,默认后面一个是、\0。。。单引号就单单表示一个位。

    这里数组只能一个位置一个位置的操作,如赋值,替换等等。不能把一个数组直接赋值给另外一个数组,无论这个数组是什么类型。

    有两种办法复制数组,一个是用for 循环对每一个位置进行赋值操作。第二个办法是:采用《string.h》里面的memcpy(a, b, sizeof(a));

    对于结构体 也是一样

    struct {
    int a;
    char b;
    } ss = {a=2, b=‘x’}; // 声明并且初始化;对于这种无结构标签的结构体,声明的变量就这一个,后面没有办法在利用这个结构体声明变量了。因为没有结构标签。

    struct p {
    int c;
    char *d;
    } ss = {c = 12, d=“helllo”}; //声明并且初始化,这种带有结构标签p的结构体,后续是可以继续单独定义变量的。如果新定义结构体,要带上struct…他俩是一起的,如:
    struct p s3; //注意这里是定义了一个类型是struct p的结构体,名字是s3,但是我们没有初始化,只是定义了变量
    struct p s4 = {c = 33, d=“world”}; // 声明s4变量,同时提供初始化。注意这里和最上面的变量ss …这两个某种程度上来说是一样的,都是定义新的变量同时初始化。

    同时:
    s3.c = 23;
    s3.d = “new value”;
    是可以这么给s3结构体里面的成员赋值的。

    对于结构是可以互相赋值的,这点比数组要好,数组无法一个数组赋值给另外一个数组,但是结构可以。

    所以上面的s3=s4 也是OK的。

    同时如果想要互相赋值两个数组,可以吧两个数组先放到结构里面,然后在把两个结构赋值,就可以变形实现两个数组赋值;

    如:
    struct Arr {
    int a[10];
    } a1, a2;
    泽可以 a1=a2;

  • 相关阅读:
    【NLP】word复制指定内容到新的word文档
    【每日一题】2258. 逃离火灾-2023.11.9
    甲方需求被公司明确指示不能做,身为公司项目经理,怎么处理?
    21天学习挑战赛--执行时长
    【JAVA项目实战】【图书管理系统】书籍管理功能【Servlet】+【JSP】+【MySql】+【Ajax】
    推荐一款基于 .NET Core开源的小程序商城系统
    Redis简介
    小程序中计算距离信息
    ftrace和tracepoint简单使用
    k8s--基础--22.12--storageclass--类型--Portworx 卷
  • 原文地址:https://blog.csdn.net/liyu180554320/article/details/125532248