typedef 关键字 给类型取别名
使用方式:typedef 原类型名 新类型名;
例: typedef struct people ren_t
#include <stdio.h>
void func(int a)
{
printf("a=%d\n",a);
}
//给函数类型取别名
typedef void func_t(int);
//给函数指针类型取别名
typedef void (*func_pt)(int);
int main()
{
printf("main=%p\n", main);
//定义函数指针 指向 函数func
//void (*fp)(int) = func;
//使用函数类型别名定义 函数指针
//func_t *fp = func;
func_pt fp = func;
//通过函数指针 调用其指向的函数
(*fp)(20);
fp(30);
return 0;
}
sizeof 运算符
是C语言中 保留关键字,也可以认为是一种 运算符,单目运算符 不是函数
char s1[10] = "abcd!",s2[10]= "\n123";
printf("%ld%d\n",sizeof(s1),strlen(s2));
输出 结果是 10 4
strlen( )测试字符串长度
注:头文件 #include <string.h>
当测试字符串时,从第一个字符开始,直到遇到 '\0' 结束,所以长度不包含 '\0'
strlen() 长度不包含'\0'
static
1.static 修饰局部变量
改变存储位置为 静态区 就会具有静态区的属性:生命周期延长 不受栈区影响 程序启动时就会被创建
只会被创建一次 ,即程序启动时 后续反复调用函数 不会被重复初始化,但可以赋值
2.static 修饰全局变量
限制全局变量作用域 只能在本文件使用 防止当多个用户共同编译时,防止重名的情况
3.static 修饰函数
限制函数作用域 只能在本文件使用该函数
const 关键字 常量
定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。
strcmp( ) 只能用于比较两个字符串
返回值:返回整数值
函数原型: int strcmp(const char *s1,const char *s2);
设这两个字符串为s1,s2,
规则
当s1
当s1=s2时,返回值= 0
当s1>s2时,返回正数
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A""A" "computer">"compare"
memset( ) 赋值
作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
注:头文件 #include
memset ( void * p, int n ,sizeof (*p)); //将sizeof (*p)的内存空间大小*p 设置为 n
memcpy( ) 内存拷贝:可以用于复制数组
memcpy(目标数组名,原数组名,长度单位字节);
注: #include <string.h> 头文件
目标数组长度 >= 原数组长度
int a[5],b[5];
memcpy(a,b,20); 将b数组复制到a数组中,20为4*5,4为 int 类型字节数;
atoi( ) 字符串转换为 整数
注:库函数 #include
int atoi(const char *nptr); //字符串转换为 整数 int
long atol(const char *nptr); //字符串转换为 整数 long int
double atof(const char *nptr); //字符串转换为 小数 double
0个位数: (num / 1) % 10;
1十位数: (num /10 ) % 10;
2百位数: (num /100) % 10;
...n 位数: (num / m ) %10;
calloc ( ) 从堆上分配指定的内存空间
原型:void *calloc(size_t n, size_t size);
比 malloc函数 多一个参数,并不需要人为的计算空间的大小
calloc在申请后,对空间逐一进行初始化,并设置值为0。
malloc( ) 从堆上分配指定的内存空间
原型:void *malloc (int size);
例如:
int *p = (int *) malloc ( 20 * sizeof ( int ) )
例如:
#define maxsize 10
int *p=(int *) malloc (maxsize * sizeof (int));
calloc ( ) 和 malloc( ) 的区别: