VS学习c语言笔记记录

学习笔记

2021.8.2

1.枚举

可以用枚举代替const int 定义名字,

2021.8.3

1.结构

结构和数组有点像,但结构里不同的单元可以是不同的类型,数组必须是一样的类型

数组用[]运算符访问 a[0]=10;

结构用.访问 today.month、pl.x、pl.y

2.结构运算【数组都不可以】

对整体做赋值、取地址;

p1=(struct point){5,10};    //赋值

p1=p2;   //值的传递

int main(int argc,char const *argv[]){
//在main函数里声明结构类型
//如果在main函数外面,一般是在外面做声明
struct date{
int month;
int day;
int year;
};          //声明结构类型
int main(int argc,char const *argv[]){
struct date today; //定义变量
struct date today{07,31,2014};   //大括号给初始值
struct date thismonth={.month=7,.year=2014};  //依次给值,没有给的会给成0
printf("today is %i=%i=%i",today.year,today.month,today.day};
1.
struct date{ 
int month;
int day;
};
struct point p1,p2; //p1,p2都是point,定义的变量名字是p1,p2,类型是struct point;
2.
struct{
int x;
int y;
}p1,p2;  //p1,p2都是一种无名结构,里面有x和y;
3.
struct point{
int x;
int y;
}p1,p2;   //同时声明了结构类型和变量;

3.输出问题

%.2i输出的小数位为2位小数

4.c语言中“.”与“->”的区别

struct point{
int x;
int y;
};                    //每个点的横坐标x和纵坐标y
struct rectangle{
struct point pt1;
struct point pt2;
};                    //矩形有两个对角点
struct rectangle r;   //可以有 r.pt1.x  r.pt1.y  r.pt2.x  r.pt2.y
//定义变量
struct rectangle r,*rp;
rp=&r;
// r.pt1.x
// rp->pt1.x
// *rp.pt1.x 
//三者等价

2021.8.4

1.__func__ 字符串 所在函数的名称;(2021.8.5 2.预定义的宏)

#include<stdio.h>
int gALL=12;
int main(int argc,char const *argv[]){
printf("in %s gALL is %d",__func__,gALL);
return 0;
}

//结果
in main is 12

 2.全局变量;

上面的函数 gALL 就是全局变量,和任何函数都没有关系,无论函数在不在;

初始值 0值或者NULL(指针);

3.静态本地变量

在本地变量前加 static 修饰,加上之后离开函数静态本地变量仍然存在,原始的值还存在;

static int all ...

静态本地变量实际上就是全局变量;

warning:不要用全局变量来传递值和参数;

尽量避免用全局变量;

丰田汽车的案子

2021.8.5

1.编译预处理 #号开头的语句并不是c语言,也可以用于其他语言,因此不需要加分号;

#include 

#define PI 3.14159 定义符号define PI是宏的名字 3.14159是这个宏的名字

在编译之前会做一次预处理,将所有c语言程序里出现的PI都换成3、14159

2.预定义的宏

__LINE__ 行号

__FINE__所在文件名的全路径

__DATE__日期

__TIME__时间

int main(int argc, char const* argv[]) {
	printf("%s:%d\n", __FILE__, __LINE__);
	printf("现在的日期是:%s,现在的时间是%s\n",__DATE__,__TIME__);
	return 0;
}

3.像函数的宏 带参数的宏

#define cube(x) ((x)*(x)*(x))宏可以带参数

【一切都要有括号 整个值要有括号 参数出现的地方要有括号!!!!!】

#define cube(x)(x*57)
#define cube2(x)(x)*5   //是错的!

可以带多个参数: #define MIN(a,b)((a)>(b)?(b):(a))

宏定义千万不要加分号!

带参数的宏

在大型程序的代码中使用的非常普遍

可以非常复杂,甚至可以产生函数,

在#和##这两个运算符

缺点:定义宏是没有任何类型检查的

有个新的inline函数代替,可以取代带参数的宏。

4.其他编译预处理指令

① 条件编译

② error

5.源文件和头文件

      首先,源文件就是.c结尾的文件,每个小的源文件需要在同一个项目下,才能互相“识别”

      为了今后比较长的代码不至于往下翻找每个函数,可以把函数单独列在一个源文件里,放在同一个项目即可。

头文件:.h结尾的文件,用#include 来调用 【 #include "max.h"】 

把函数原型放在一个头文件中,用#include调用后编译器就知道了函数原型是什么 头文件是个桥梁

6.#include

 把文件全部原封不动的插入

因此,#include不一定出现在 .c源文件之前

 #include有两种形式 ① <>【系统给的】

② “” 【自己定义的】 

误区:#include不是用来引入库的

stdio.h里只有printf的原型,编译产生的目标代码文件都不在stdio.h,在某个.lib中。

只是让编译器知道函数原型、

累计问题

1.【scanf出错的问题】

项目 —> 属性 —> 所有选项中的SDL检查变为否 就可以;

2.【"const char *" 类型的实参与 "char *" 类型的形参不兼容】

项目 —> 属性 —> 将语言中的“符合模式”变为否 就可以;

3. (a)>(b)?(b):(a)

a大于b吗?大于的话值就是b,否则就是a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九九345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值