这一节主要写一些比较零散的知识,一边写,一边复习,如有问题,欢迎指正
字符串
在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。
说白了,结构体可以保存很多不同的数据,但是联合体呢,每次只能保存一个成员数据,其他数据是没有的,你要使用另一个成员数据时,你之前保存的也没了。
你问联合体可以干嘛?
嵌入式里面,分离高低位,寄存器封装,经常需要用到