C语言部分内容学习笔记

C语言学习

单纯为了防止自己忘记,记录一些较为重要的概念,可能对您没有任何作用,为了节约您的时间,可以不用往下看了。

指针

数据和变量在内存中都有一个地址,而指针作为一种特殊的变量,专门用于存放数据的指针(地址)。

  • 定义指针变量的方法:
int *var
char *var2

如上所定义,varvar2分别定义了两个指向int, char的指针变量,但是此时varvar2虽然类型确定了,但是具体的是什么东西此时还未知,需要有下一步的赋值才有定义:

int a = 100;
var = &a;
  • &的作用是取地址,于是a的地址就被取出来赋给了var指针。
  • *的作用是取值

注意,*符号在定义一个新的指针变量的时候才写,对指针变量进行赋值时不能加*。除此之外,在已经定义好的指针变量之前加*,可以取出该地址指向的位置的数据。所以如果想修改指针,只能是p = &a这种形式(下面代码第二行是初始化,等价于两行)

int a = 15;
int *p = &a;
printf("%d, %d\n", a, *p);  //两种方式都可以输出a的值
输出:
1515

函数

  • 函数定义
dataType  functionName(){
    //body
}

dataType 是返回值类型,它可以是C语言中的任意数据类型,例如 int、float、char 等。
functionName 是函数名,它是标识符的一种,命名规则和标识符相同。函数名后面的括号()不能少。如果有参数输入,那么要在括号中加入参数声明。
body 是函数体,它是函数需要执行的代码,是函数的主体部分。即使只有一个语句,函数体也要由{ }包围。
– 如果有返回值,在函数体中使用 return 语句返回。return 出来的数据的类型要和 dataType 一样

结构体

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};

以上代码则定义了一个结构体类型,其名为stu,此时的stu还和int一样,只是一个类型,还需要具体定义一个变量才能使用:

struct stu a,b,c;
  • 注意关键字struct不能少。

stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
} stu1, stu2;
  • 在定义的结尾顺手声明了几个结构体变量。
  • 需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。
  • 使用.来获取成员数据
给结构体成员赋值
    stu1.name = "Tom";
    stu1.num = 12;

结构体指针

当一个指针变量指向结构体时,我们就称它为结构体指针

//结构体
struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1 = { "Tom", 12, 18, 'A', 136.5 };
//结构体指针
struct stu *pstu = &stu1;

注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,所以给 pstu 赋值只能写作:

struct stu *pstu = &stu1;

而不能写作:

struct stu *pstu = stu1;
  • 通过结构体指针获取成员的方法:
pointer->memberName
  • 结构体指针作为函数参数
    时结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速

typedef

typedef的主要作用是为一些数据结构起别名,达到少写代码,增强可读性的作用。

typedef  oldName  newName;

更多的,typedef可以为结构体或者数组定义别名:

typedef struct stu{
    char name[20];
    int age;
    char sex;
} STU;

如上所示,STUstruct stu 的别名,

STU body1,body2 等价于 struct stu body1, body2;

文件引用

模块化编程中,.h文件一般用于一些函数,变量,结构体的声明,而一般用另一个不包含main().c文件来具体描述函数的实现

比如.h文件是这样的:
.h文件
而具体定义用的.c文件长这样:
在这里插入图片描述
主函数则长这样:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值