版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin0605/article/details/89787385
C语言简单笔记
常见函数
#include<stdio.h>
- scanf(’%d’,&x);
- 输入
- 格式同printf
- 输入数据时需要在对应位置输入相同的字符
- %*d
- 跳过输入
- printf(‘xxx%d’,x);
- putchar©
- 输出一个字符
- getchar()
- 取得一个字符
- sizeof(int)
- 查看类型大小
- #define PI 3.1415
- 符号常量(不占内存)
- const float pi = 3.1415;
- 常变量(占内存)
#include<math.h>
- sqrt()
- 开根号
- fabs()
- 求绝对值
- abs()
- sin()
- cos()
#include<string.h>
- puts(str)
- 输出到终端
- gets(str)
- 从终端输入
- strcat(str1,str2)
- str1 = str1 + str2
- 字符串拼接
- strcpy(str1,str2)
- str1 = str2
- 字符串复制,包括’\0’
- strncpy(str1,str2,n)
- 将str2前n个字符复制到str1,不包括’\0’,取代str1中前n个
- strcmp(str1,str2)
- 字符串比较
- strlen(str)
- 字符串长度,不包括’\0’
- strlwr(str)
- 转换为小写
- strupr(str)
- 转换为大写
#include<stdlib.h>
- malloc
- void *malloc(unsigned int size)
- 开辟动态存储区
- calloc
- void *calloc(unsigned n,unsigned size)
- 开辟动态存储区
- realloc
- void *realloc(void *p,unsigned int size)
- 重新分配动态存储区
- free
- void *ree(void *p)
- 释放动态存储区
数组
- int a[10] = {0}
- 初始化时未赋值默认为0
- int a[] = {1,2,3,4,5}
- char c[10] = {’\0’}
- 初始化时未赋值默认为’\0’
//多个输入以空格分隔
//str本身就是地址,不用加'&'
char str[10];
scanf("%s",str);
prinft("%s",str);
- 指针数组
- 初始化为NULL
- int a[可为空][4] = {{},{},{}}
指针
int *i_pointer;
int i = 3;
*i_pointer = 3;//对指针对应的地址空间赋值,i_pointer为指向的地址
i_pointer = &i;
- &
- 取变量中的地址
#include<stdio.h>
int main(){
void swap(int *p1,int *p2);
int *p1,*p2;
scanf("%d%d",&a,&b);
p1 = &a;
p2 = &b;
swap(p1,p2);//将指针传输
}
swap(int *p1,int *p2){//根据指针地址取值
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
指针与数组
int a[10] = {0};
int *p;
p = &a[0];//p=a
*(p+i) = a[i];//p++/p--
*(a+i) = a[i];
- 用数组名做参数的函数
- f(int arr[],int n)
- f(int *arr,int n)
多维数组
- a = &a[0][0]
- a+i = &a[i]//行指针
- a+i != &a[i][0]
- a[0]+i = &a[0][i]
指针与字符串
char *a;
a = "xxx";//将字符串第一个字符地址赋值给指针变量
char str[10];
str[0] = 'r';
str = "xxx";//错误,不能赋值
char *a = "xxxx";
b[2] = ‘x’;//错误,字符串常量不能修改
函数指针
- (*p)(int,int)
#include<stdio.h>
int main(){
int max(int,int);
int (*p)(int,int);
p = max;
int a,b,c;
scanf("%d,%d",a,b);
c = (*p)(a,b)
}
int max(int x,int y){
int z;
if(x>y){
z = x;
}else{
z = y;
}
return z;
}
函数指针做函数参数
- void fun(int (*x1)(int),int (*x2)(int,int)){}
返回指针值的函数
- 类型名 *函数名(参数列表)
指针数组
- 类型名 *数组名[数组长度]
预处理
宏
- #define PI 3.14
- #undef //终止宏
- #define S PI*r*r//嵌套
- 带参数宏
- #define My(y) y*y
- #include<stdio.h>
- 直接查找标准库
- #include “stdio.h”
- 先查询用户当前目录,没有再查询标准库
条件编译
#ifdef 标识符
程序段1
#else
程序段2
#endif
#ifndef 标识符
程序段1
#else
程序段2
#endif
#if 标识符
程序段1
#else
程序段2
#endif
自建数据类型
结构体
struct student{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
- struct student st1,st2;
- st1.name
结构体指针
- (*结构指针变量).成员名
- (*p).name
- 结构指针变量->成员名
- p->name
链表
#include<stdio.h>
struct student{
long num;
float score;
struct stundet *next;
}
void main(){
struct student a,b,c,*head,*p;
head = &a;
a.next = &b;
b.next = &c;
c.next = NULL;
p = head;
do{
//循环遍历方法
p = p->next;
}while(p!=NULL)
return;
}
- #define LEN sizeof(struct student)
- 结构体大小
- struct student *p1 = (struct student *)malloc(LEN)
- 开辟struct结构大小的内存空间给p1
typedef
- typedef int Integer;
- Integer代替int
- typeof int NUM[100];
- typeof char* STRIN;
- typeof int (*POINTER)();
文件操作
- FILE *fp
- 文件型指针变量
- fopen
- 文件打开
- fp = fopen(文件名,使用文件方式);
- 文件使用方式查看表
- r:读
- w:写
- a:追加
- rb:二进制形式只读
- fcloes
- 文件关闭
- fclose(fp);
- fputc(ch,fp);
- fgetc/fputc
- 字符读写
- fgets/fputs
- 字符串读写
- freed/fwrite
- 数据块读写
- fscanf/fprinf
- 格式化读写
- feof
- 判断文件是否结束
位运算
- &
- |
- ^
- ~
- <<
- >>
位段
struct packed-data
{
unsigned a:2;
unsigned b:2;
int i;
} data;
其他
- 八进制:0开头
- 十六进制:0x开头
- 浮点数:f结尾
- 一个字节8位
- 1BYTE = 8bit
- 负数补码
- 原码取反加一
- 双精度只能保证15位精度
- 所有浮点运算都会以双精度进行的