012C语言
回顾:
1.字符串数组
char *pa[5];
pa[0] -->一个字符串
可以指向 5个字符串
char a[5][10]; 保存一个字符串
用字符的二维数组保存字符串数组
char **ppa;
2. 字符串数组的案例<带参数的main>
char *argv[] 命令行传入的参数内容
一个字符串就是一个参数
int argc 记录上面数组的元素个数
3. 程序的编译过程,--> 预处理
预处理掉 源代码中所有#开始的语句和注释
宏 #define
宏变量
宏函数
内置的宏 __DATE__
__TIME__
条件编译
#if #else #endif
#define
#ifndef #else #endif
#ifdef #else #endif
#ifndef //防止头文件交叉引用
#define
//头文件的内容
#endif
#include
<>
"" 查找当前目,在找系统目录
----------------
构建大型程序
多人参与开发,由多个.c文件,如何将多个.c编译成为一个可执行程序?
1.将每个.c文件进行独立编译成为.o
将.c文件关于函数原型的声明及其他公共使用到的声明 放到对应.c文件的头文件中,其他的.c 通过include 将头文件引用,即可对该.c函数的调用.
static 限制外部.c文件使用
extern 符号的具有外部链接特性
2.将所有的.o文件 链接成一个可执行文件
make 项目编译
make 在当前目录找 makefile/Makefile 文件
创建makefile 文件,编写编译规则
一条规则
目标:该目标依赖的文件
[tab]用依赖文件生成目标文件的命令
-------------------------
自定义数据类型 (int float)
结构体
怎么构造自己的类型
vim打开多个文件 vim 文件1 文件2 -p
struct (构造体)
/*
* 描述一个学员信息
*/
#include<stdio.h> #include <string.h> int main(){ //1.定义student 类型 struct student{ char name[20]; int score; int age; }stu1,stu3; //声明了2个student 类型的 变量stu2,stu3 stu1.score = 80; //stu1.name = "李辉"; //不可这么赋值 strcpy //strcpy("李辉",stu1.name); 不可以 strcpy(stu1.name,"李辉"); stu1.age = 18; printf("该学员的姓名=%s\n",stu1.name); printf("该学员的成绩=%d\n",stu1.score); printf("该学员的年龄=%d\n",stu1.age); getchar(); return 0; }
typedef 设定结构体类型的别名
#include<stdio.h> #include <string.h> int main(){ #if 0 //1.定义student 类型 struct student{ char name[20]; int score; int age; }stu2,stu3; //声明了2个student 类型的 变量stu2,stu3 #endif typedef struct student{ //student 可以省略 char name[20]; int score; int age; }Student; //struct student stu1 ==>Student stu1 //用student 类型 声明变量stu1 // struct student stu1; Student stu1; //使用结构体 //[练习]给该学员 赋值姓名 和年龄 然后打印 //字符串赋值 strcpy stu1.score = 80; //stu1.name = "李辉"; //不可这么赋值 strcpy //strcpy("李辉",stu1.name); 不可以 strcpy(stu1.name,"李辉"); stu1.age = 18; printf("该学员的姓名=%s\n",stu1.name); printf("该学员的成绩=%d\n",stu1.score); printf("该学员的年龄=%d\n",stu1.age); return 0; }
typedef int int32
uint32 //无符号32整型
typedef unsigned int uint32
typedef struct {
}
#include <stdio.h> typedef int INT; typedef unsigned int uint32 ; int main(){ INT i = 0; uint32 i32 = 0; printf("sizeof(INT) = %d\n",sizeof(INT)); getchar(); return 0; }
#include <stdio.h> int main(){ typedef struct student{ //student 可以省略 char name[20]; int score; int age; }Student; Student stu1 ={"李辉",0,80}; printf("该学员的姓名=%s\n",stu1.name); printf("该学员的成绩=%d\n",stu1.score); printf("该学员的年龄=%d\n",stu1.age); getchar(); return 0; }
#include <stdio.h> int main(){ typedef struct student{ //student 可以省略 char name[20]; int score; int age; }Student; Student stu1 ={"李辉",0,80}; Student * ps = &stu1; //声明一个结构体指针变量 指向stu1 ps->score = 90; printf("ps->name姓名=%s\n",ps->name); printf("ps->score成绩=%d\n",ps->score); printf("ps->age年龄=%d\n",ps->age); getchar(); return 0; }
#include <stdio.h> int main(){ typedef struct{ //student 可以省略 char name[19]; char c1; char c2; int score; int age; }Student; //struct student stu1 ==>Student stu1 Student stu1; Student * ps = &stu1; //声明一个结构体指针变量 指向stu1 printf("sizeof(ps) = %d\n",sizeof(ps)); //4 printf("sizeof(stu1) = %d\n",sizeof(stu1)); //28 printf("sizeof(int) = %d\n",sizeof(int)); //4 printf("sizeof(Student) = %d\n",sizeof(Student)); //28 getchar(); return 0; }
sizeof(ps) = 4
sizeof(stu1) = 32
sizeof(int) = 4
sizeof(Student) = 32
bit对其
#include <stdio.h> typedef struct student{ //student 可以省略 char name[20]; int score; int age; }Student; void func (Student* s); int main(){ Student stu1 ={"李辉",30,30}; func(&stu1); printf("姓名=%s\n",stu1.name); printf("成绩=%d\n",stu1.score); printf("年龄=%d\n",stu1.age); getchar(); return 0; } void func (Student* s) { s->age = 18; //return 0; }
/* * 结构体应用 * 结构体作为函数的参数, * 值传递,而不是指针,跟基本类型变量一样 * 跟指针,数组 不一样 * 如果要修改传入的结构体,应该传指针 * * * 结构体作为函数的返回值 * 跟普通基本类型一样 * */ #include<stdio.h> #include <string.h> typedef struct student{ //student 可以省略 char name[20]; int score; int age; }Student; //struct student stu1 ==>Student stu1 #if 0 void func (Student s); void func (Student s) { s.age = 18; //return 0; } void func (Student* s); void func (Student* s) { s->age = 18; //return 0; } #endif #if 0 Student func (Student s); Student func (Student s) { s.age = 18; return s; } #endif Student* func (Student s); Student* func (Student s) { s.age = 18; return &s;//不可以返回局部变量的地址 } int main(){ //Student stu2 ={0}; Student stu1 ={"李辉",30,30}; //stu1 = func(stu1); Student *ps = func(stu1); printf("ps->name姓名=%s\n",ps->name); printf("ps->score成绩=%d\n",ps->score); printf("ps->age年龄=%d\n",ps->age); #if 0 printf("姓名=%s\n",stu1.name); printf("成绩=%d\n",stu1.score); printf("年龄=%d\n",stu1.age); printf("输入姓名:"); //scanf("%s",stu1.name); scanf("%s",ps->name); printf("输入成绩:"); //scanf("%d",&(stu1.score)); scanf("%d",&(ps->score)); printf("输入年龄:"); scanf("%d",&(ps->age)); printf("ps->name姓名=%s\n",ps->name); printf("ps->score成绩=%d\n",ps->score); printf("ps->age年龄=%d\n",ps->age); #endif return 0; }
结构体的数组
#include<stdio.h> #include <string.h> typedef struct student{ //student 可以省略 char name[20]; int score; int age; }Student; //struct student stu1 ==>Student stu1 //void func (Student s[],int len); void input (Student *s,int len); //跟上面是一样的 void input (Student* s,int len) { for(int i = 0;i<len;i++) { printf("输入姓名:"); scanf("%s",s[i].name); printf("输入成绩:"); scanf("%d",&(s[i].score)); printf("输入年龄:"); scanf("%d",&(s[i].age)); } //return 0; } void output (Student *s,int len); //跟上面是一样的 void output (Student *s,int len) { for(int i = 0;i<len;i++) { printf("第%d个姓名:%s\n",i+1,s[i].name); printf("第%d个成绩:%d\n",i+1,s[i].score); printf("第%d个年龄:%d\n",i+1,s[i].age); } //return 0; } int main(){ Student stu1 ={"李辉",30,30}; Student s[10]; //声明10个Student 结构体的数组 input(s,3); output(s,3); getchar(); getchar(); return 0; }