通俗易懂C语言---知识补充

这一节主要写一些比较零散的知识,一边写,一边复习,如有问题,欢迎指正

 字符串

在C语言中,是没有字符串类型的,那么怎么去定义这个字符串呢

char str[]="hello anthony";
char *p=str;
char str[14]="hello anthony";
char str[4]={'a','b','c','\0'};

看一下这个代码

#include <stdio.h>
 
void main(){
   char str[50];
   int i;
   char *string="fhdfhsjdhfkhsdkfhkjshdjkfhsdkfhjkshdkjfhskdfhkshdkjfhjskdfhkjshfkhskjfhskjhfkjshfkj";
   for(i=0;i<49;i++){
        str[i]=string[i];
   }
   printf("%s\n",str);
}

字符串没有初始化,并且给到str[i]的也没有'\0',那么最终会输出一个什么呢:

fhdfhsjdhfkhsdkfhkjshdjkfhsdkfhjkshdkjfhskdfhkshd烫蘰

最后会出现乱码,以上就是字符串的一些注意事项

sizeof()和strlen()

对于字符串来说,怎么去知道它的长度,如果你需要把\0包括在内,就用sizeof,如果不想包括,就用strlen()。

递归函数

一个函数在它的函数体内调用它自身称为递归函数

一个简单的例子:

long factorial(int n){
   if(n==0 || n==1){
    return 1;
 }else{
   return factorial(n-1)*n;
   }
}

main......

联合

联合的定义和结构体是一样的,不同的在于结构体的每个成员地址是不一样的,而联合的所有成员都是从同一个地址开始的,也就是说,牵一发而动全身。

联合只有一个初始化器,看下结构体初始化定义:

struct TIME time={1,2,2021};

那么联合呢,联合体变量中的成员是共用一个首地址,共占同一段内存空间,所以在任意时刻只能存放其中一个成员的值。所以,在对联合体类型的变量定义并初始化时,只能对 1 个成员赋初值,初值需要用 “{}” 括起来。

#include <stdio.h>
int main()
{
    union ucode   /*定义联合体类型*/
    {
        char u1;
        int u2;
    };
    union ucode a;   /*定义联合体类型的变量*/
    a.u2=5;
    printf("输入a.u1的值:\n");  /*提示信息*/
    scanf("%d",&a.u1);
    printf("输出数据:\n");
    printf("%c\n",a.u1);   /*提示信息*/
    printf("%d\n",a.u2);
}

输出结果:

输入a.u1的值:
65
输出数据:
A
65
  • 第 09 行定义联合体类型变量 a;
  • 第 10 行对 a 中的 u2 成员即 a.u2 赋值 5;
  • 接着又通过 scanf 语句对 a.u1 赋值,从键盘输入 1 个字符的 ASCII 码值,这里运行时输入了 65;
  • 那么第12行的输出结果即是此时a中有效的成员 a.u1 的值,输出字母 A;
  • 第 13 行 a.u2 尽管没有实际意义,但由于它和 a.u1 共用一个首地址,且占用相同的存储空间,所以输出的结果是整数 65。

说白了,结构体可以保存很多不同的数据,但是联合体呢,每次只能保存一个成员数据,其他数据是没有的,你要使用另一个成员数据时,你之前保存的也没了。

你问联合体可以干嘛?

嵌入式里面,分离高低位,寄存器封装,经常需要用到

目录 第1章 一大波数正在靠近——排序 1 第1节 zui快zui简单的排序——桶排序 2 第2节 邻居好说话——冒泡排序 7 第3节 zui常用的排序——快速排序 12 第4节 小哼买书 20 第2章 栈、队列、链表 25 第1节 解密QQ号——队列 26 第2节 解密回文——栈 32 第3节 纸牌游戏——小猫钓鱼 35 第4节 链表 44 第5节 模拟链表 54 第3章 枚举!很暴力 57 第1节 坑爹的奥数 58 第2节 炸弹人 61 第3节 火柴棍等式 67 第4节 数的全排列 70 第4章 wan能的搜索 72 第1节 不撞南墙不回头——深度优先搜索 73 第2节 解救小哈 81 第3节 层层递进——广度优先搜索 88 第4节 再解炸弹人 95 第5节 宝岛探险 106 第6节 水管工游戏 117 第5章 图的遍历 128 第1节 深度和广度优先究竟是指啥 129 第2节 城市地图——图的深度优先遍历 136 第3节 zui少转机——图的广度优先遍历 142 第6章 zui短路径 147 第1节 只有五行的算法——Floyd-Warshall 148 第2节 Dijkstra算法——通过边实现松弛 155 第3节 Bellman-Ford——解决负权边 163 第4节 Bellman-Ford的队列优化 171 第5节 zui短路径算法对比分析 177 第7章 神奇的树 178 第1节 开启“树”之旅 179 第2节 二叉树 183 第3节 堆——神奇的优先队列 185 第4节 擒贼先擒王——并查集 200 第8章 更多精彩算法 211 第1节 镖局运镖——图的zui小生成树 212 第2节 再谈zui小生成树 219 第3节 重要城市——图的割点 229 第4节 关键道路——图的割边 234 第5节 我要做月老——二分图zui大匹配 237 第9章 还能更好吗——微软亚洲研究院面试 243 啊哈算法 目 录 第1章 编程改变思维 1 第1节 为什么要学习编程 1 第2节 本书是讲什么的,写给谁看的 4 第2章 梦想启航 7 第1节 编程的魔力 7 第2节 让计算机开口说话 9 第3节 多彩一点 18 第4节 让计算机做加法 21 第5节 数字的家――变量 26 第6节 数据输出――我说咋地就咋地 31 第7节 数据输入――我说算啥就算啥 33 第8节 究竟有多少种小房子 37 第9节 拨开云雾见月明 40 第10节 逻辑挑战1:交换小房子中的数 42 第11节 天啊!这怎么能看懂 45 等等。。。。。。。。。。。。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值