1、
给一个字符数组输入字符串
char arr[10];
gets[arr]; //gets函数接收回车符,如果直接按回车,gets函数会把回车符转变成空字符作为结束,即arr[0]==’\0’;
2、
文件结尾标志ctrl+z表示返回NULL
自己定义的头文件里面一般有宏定义和声明(函数声明,结构声明)。这些都不是可执行代码,而是编译器用于产生可执行代码的信息,可执行代码通常在源代码中,而不再头文件,比如定义了一个book.h头文件,里面放声明,可执行代码的定义放在book.c源文件中,在book.c写定义的时候也要加上头文件book.h
注:头文件只能有宏定义,函数声明,结构声明(结构体联合体)和内联函数,如果定义变量如int i;会报错,结构体声明后还定义变量的也会报错,如
Struct student {…}s; 头文件中就不能定义变量。
3、
不允许定义结构体指针变量后用指针直接给成员变量赋值,要赋给指针地址才能赋值。一个指针定义了后没有初始化或者赋地址值,就不知道这个指针指向内存中的哪个地方,容易引起程序崩溃,如
struct name
{
char names[20];
}
void main()
{
struct name *pt; //指针没赋地址值,内存中不知道指向哪里
gets(pt->names); //error,引起程序崩溃
struct name name1; //定义一个结构体变量,没有初始化,但有明确的地址值
struct name *pt1 = &name1; //给指针赋地址值让指针有明确指向
gets(pt1->names); //正确
}
4、
#ifdef MAVIS
#include <stdio.h>
#define STABLES 5
#else
#include “cow.h”
#define STABLES 15
#endif
#ifdef //说明如果预处理器已经定义了一个标识符MAVIS则执行#ifdef里面的语句,否则执行#else语句
#ifndef SIZE
#define SIZE 100
#endif
如果预处理器没有定义标识符SIZE则执行#ifndef语句
一般在头文件中需要加入ifndef处理,这样在源代码中不小心引入多个相同的头文件也不会报错,第一次调头文件如果SIZE没有定义,进入#ifndef内部执行相关头文件代码,第二次在调用相同头文件就不会进入#ifndef内部执行相同的头文件代码,如果没有#ifndef就会执行两遍头文件代码会报错,例子
#ifndef SIZE
//明示常量
#define SIZE 10
//函数声明
void max(int, int);
//内联定义
inline static eat()
{
printf(“haha”);
}
//结构声明
struct name {
char arr[10];
};
//类型定义
typedef struct name names;
#endif
常见的预处理宏
__DATE__日期(字符串形式)
__FILE__当前源代码文件名(字符串形式)
__LINE__当前源代码文件中行号整数常量(整型)
__TIME__源文件编译时间,不是当前系统时间(字符串形式)
5、
记住常用数学库,头文件math.h
6、
string.h
memcpy(void *rec,void *dest,n)
把dest中前n个字节拷贝到rec指向的字符串中
对比strncpy(char形指针地址,char形指针地址,字节数)
7、
//匿名结构体
typedef struct
{
int i;
}arr;
arr arr1;
struct
{
int i;
}arr;
arr.i=10; //arr为结构体变量名
8、
结构体问题
88、结构体问题
struct person
{
int age;
}p;
//p是一个已经创建好的对象,相当于struct person p; 如果放在头文件中容易被多个文件包含报重定义错误
typedef struct person
{
int age;
}person;
//person就是struct person,这时候并没有创建对象,放在头文件被多个文件包含不会报错,创建对象为person p;
9、
进制转换
(1)十进制(14)–>二进制
14/2=7…0
7/2=3…1
3/2=1…1
1/2=0…1
二进制为1110
(2)八进制(17)–>十进制
7x8零次方+1x8一次方=15
(3)十进制(88)–>八进制
88/8=11…0
11/8=1…3
1/8=0…1
八进制为130
(4)十进制(88)–>十六进制
88/16=5…8
5/16=0…5
十六进制是58
(5)十六进制(0X32C)–>十进制
Cx16零次方+2x16一次方+3x16二次方=812
10、
float i = 3.2e3f; (i是3.2x10三次方=3200)