为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
Linux C语言结构体_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

Linux C语言结构体

雷过就跑 移动开发工程师
难度初级
时长 1小时30分
  • 按位异或,可用于交换变量。先异或出不一样的地方,再修改
    查看全部
  • 5-2 动态链表 建立动态链表: #include <stdio.h> #include <malloc.h> // struct weapon { int price; int atk; struck weapon * next;//指针变量 存放下一个节点地址 } // struct weapon * create(){ struct weapon * head;//头指针 struct weapon * p1,*p2;//p1 当前新创建节点,p2上一个节点 int n=0;//记录当前节点个数 //使用malloc函数(malloc分配内存块的函数,sizeof判断数据类型长度) p1=p2=(struct weapon *)malloc(sizeof(struct weapon));//使用malloc函数开辟第一个节点 scanf("%d,%d",&p1->price,&p1->atk);//第一个节点单独赋值 head = NULL;// //约定price为0,就不把节点链接入列表(结束) while(p1->price!=0){ n++ if(n==1) head=p1;//第一次时,指向头指针 else p2->next=p1; p2=p1 p1=(struct weapon*)malloc(sizeof(struct weapon));//开辟新的存储区 scanf("%d,%d",&p1->price,&p1->atk); } p2->next =NULL; return (head); } int main(){ struck weapon a,b,c, *head; p=create(); printf("",p->atk,p->price); return 0; }
    查看全部
  • 20161014 5-1动态数据结构 静态数据结构:整型,浮点型 ,数组。固定大小 动态数据结构:动态存储分配 链表:头指针head。节点。需要的实际数据,下一个节点地址。链表地址不连续 head->A (节点。需要的实际数据,下一个节点地址)->b ->p ->空 静态链表:所有节点在程序中定义,而不是临时开辟 #include <stdio.h> struct weapon { int price; int atk; struck weapon * next;//指针变量 存放下一个节点地址 } int main(){ struck weapon a,b,c, *head; a.price = 100; //1.1 内容初始值 a.atk = 100; b.price = 200; b.atk = 200; c.price = 300; c.atk = 300; //2 连成链表。 head = &a;//2.1 第一个节点地址赋给头指针head a.next = &b;// b.next = &c; c.next = NULL;//2.3 链表最后一个元素 指针变量为空 struct weapon *p;//借助指针P访问节点 p = head;//1.4 头指针 while(p!=null){ printf("",p->atk,p->price); p= p->next;//指向下一个节点 } return 0; }
    查看全部
  • 20161014 4-1共用体(联合体) 共用体:使用union 关键字 共用体内存长度是内部最长的数据类型的长度。 共用体的地址和内部各成员变量的地址都是同一个地址 #include <stdio.h> union data{ //g让不同类型的变量共享内存地址 ,同一时间只有一个成员有效 int a; char b; int c; } 结构体大小: 结构体内部的成员,大小等于最后一个成员的偏移量+最后一个成员大小+末尾的填充字节数。 结构体的偏移量:某一个成员的实际地址和结构体首地址之间的距离。 结构体字节对齐:每个成员相对于结构体首地址的偏移量都得是当前成员所占内存大小的整数倍,如果不是会在成员前面加填充字节。结构体的大小是内部最宽的成员的整数倍。 int main(){ union data data_1 = {1};//初始化时只填写一个值。(同一时间只有一个成员有效) data_1.b='c'; data_1.a=10;//后赋值的才有效。前面的赋值被覆盖 return 0; }
    查看全部
    0 采集 收起 来源:Linux C公用体

    2018-03-22

  • 位移运算————左移、右移 4、让二进制左移N位,高位丢弃,低位补0,得到的 新值 = 原值*2^N, 作用:实现二倍乘运算 问题:int是有符号类型,左移可能会把符号左移出去,发生溢出。 5、右移和左移不同的是:有符号数右移高位根据符号觉得补0还是补1,如果补1,不同的计算机系统会有不同的处理方式.
    查看全部
  • 4、按位取反 唯一单目运算符,具有右结合性。
    查看全部
  • 3、按位异或(互斥取1,反之取0)应用:定位翻转;数值交换
    查看全部
  • 2、按位或的作用:b = b| oxFF,能设定数据b的指定二进制数后8位置为1,即计算和b的十进制等于255.
    查看全部
  • 3-1结构体的声明和定义 结构体:不同类型变量的集合。 #include <stdio.h> struct weapon{ char name[20]; int atk; int price; }weapon_2//定义方法2: 声明的时候直接定义,相当于一个全局变量。结构不够清晰,不便于维护 //定义方法3: 不声明结构体的名字 如:struct{char name[20];int atk}weapon_3。不能用这个结构体名字(因为没有名字)定义其他结构体变量。 3-2结构体初始化: int main(){ int a= 0; float b= 0.0; struct weapon weapon_1;//声明和定义分离。最常用 } 结构体的初始化 int main(){ int a= 0; float b= 0.0; struct weapon weapon_1={"weapon_name",100,200};//初始化结构体对象的值。 printf("%s\n",weapon_1.name);//"."运算符 访问结构体的成员(引用)。结构体成员操作与其他数据类型操作一样。 struct weapon weapon_a[2]={"weapon_name",100,200,"weapon_name2",200,202};//结构体数组,每一个元素都是一个结构体类型。结构体数组初始化方法1 //方法2{["weapon_name",100,200],["weapon_name2",200,202]}也有效。 } 3-3结构体指针: struck weapon * w; w= &weapon_1; printf("%s\n",(*w).name);//"(*w)." "*w" 表示w指向的结构体变量。因为'.'的优先级高,括号不可省略 (*w).name表示w指向的结构体变量的成员 //可用w ->name替代。 "->"指向运算符等价weapon_1.name 结构体数组: struct weapon * p; p = weapon_a;//指向weapon_a的起始地址,即weapon_a第一个元素; printf("%s\n",p ->name); P++;// weapon_a +1 指向 weapon_a[1];
    查看全部
  • C语言————位运算 有6种: &, |, ^(亦或), <<(左移), >>(右移)。 注意:参与位运算的元素必须是int型或者char型,以补码形式出现。 1、按位与的作用: ① a = a&0,能迅速使a清零; ② b = b&7, 能保留b中指定的后三位二进制数; ③int isOddNumber = a&1,若isOddNumber是1,则a为奇数,否则为偶数。
    查看全部
  • typedef关键字:作用 给变量类型取别名。预处理之后不会被替换(宏会被替换)。有作用域(宏没有作用域,全局)。 typedef int tni; typedef int *p;(给int * 定义别名p int *q; == p q;)
    查看全部
  • 20161013 LinuxC语言结构体 2-1 预处理 gcc -o helloworld.i helloworld.c 执行过程如下: .c文件 -> (预处理).i文件 ->(编译) .s文件 ->(汇编).o文件 ->(链接)可执行文件 gcc -o helloworld.i helloworld.c -E (只进行预处理,生成.i文件 ) 预处理: 1.展开头文件(如 展开 include <stdio.h>的内容) 2.宏替换:本质就是发生在预处理的单纯的字符串替换 注释 宏定义: 就是常量,数组buffer。不以分号结尾 #define R 10(此处 10为字符串) 宏函数 #define N(n) n*10 #define M int main( #define ADD(a,b) (a+b) int add(int a,int b){ return a+b; } M){ int a=20; int b= N(a); printf("b=%d\n",b);// int b = a*10; int e = ADD(a,b)*ADD(a,b); printf("e=%d\n",e);// int b = a*10; return 0; } 宏函数特点:不考虑C语法 ,不受返回值类型限制。
    查看全部
  • 20161013 LinuxC语言结构体 2-1 预处理 gcc -o helloworld.i helloworld.c 执行过程如下: .c文件 -> (预处理).i文件 ->(编译) .s文件 ->(汇编).o文件 ->(链接)可执行文件 gcc -o helloworld.i helloworld.c -E (只进行预处理,生成.i文件 ) 预处理: 1.展开头文件(如 展开 include <stdio.h>的内容) 2.宏替换:本质就是发生在预处理的单纯的字符串替换 注释 宏定义: 就是常量,数组buffer。不以分号结尾 #define R 10(此处 10为字符串)
    查看全部
  • 非常出差
    查看全部
  • 动态数据结构————动态链表(代码3) main()函数中p默认指向第一个结点。 可是为什么呢?为什么不是指向head头指针呢? ————因为定义函数create()中有一句: if(n==1) head=p1;
    查看全部

举报

0/150
提交
取消
课程须知
本课程为C语言的中级课程 1、需要有一定的C语言基础,如有基础薄弱的童鞋可以看一下网站上其他3门C语言的课程 2、因在Linux环境下,需会一些Linux下的命令,可以看一下《Linux C语言编程原理与实践》此课。
老师告诉你能学到什么?
1、预处理是干什么的 2、结构体是什么 3、公用体是什么 4、位运算是怎么回事 5、如何实现动态数据结构体 6、递归的原理
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!