自学C语言第一天打卡(初识C语言)

前言

 对目前一眼望到头的工作不太满意吧,打算转码,利用下班时间自学一些编程方面的课程,查阅了一些资料吧,据说java方向已经卷的人满为患了,于是选择了嵌入式方向进行学习,目前跟着网课刚刚把C语言初识部分过了一遍,第一次公开发布学习的内容,这也是个整理自己的学习笔记和复习查缺补漏的机会,如果一些基础的知识能对各位同学有所帮助那便是十分荣幸的了,如有错误的地方望前辈指正。

  C语言初识

#include<stdio.h>

int main()
{
printf("Hello World!");
return 0;
}
  • #include是文件包含命令,预处理包含头文件的内容,把头文件的内容插入(复制粘贴)到该命令行,使其与源文件相联通
  • <>是编译器会从系统路径下查找头文件
  • stdio中的std是standard的简写,标准的意思;而io是input和output的简写,输入输出的意思
  • .h是头文件,.c是源文件
  • 第一行#include<stdio.h>的意思是调用了标准库,之后使用库函数就可以被识别出来了
  • int main() 

        {

           return0;

           }//这是主函数的结构,有且只能有一个主函数,且代码执行顺序是从主函数开始的。int是定义整型返回值,main是主函数关键字,()是里面的参数,一般为无,老版本可能会int main(void),这并无影响,指代无参数的意思,也可省略。

  • return 0;是返回值为整数的意思,和前面int整型相呼应,里面可以不为0,为其他整数,但是行业公共默认写为0
  • printf是打印输出的意思

数据的类型

  • 整型int  短整型short  字符型char  长整型long  长长整型longlong  浮点型float  双精度浮点型double都是数据的类型。
  • printf("%zu\n" ,sizeof(char));  //1bit,表示数据类型的长度,即内存空间大小
  • printf("%zu\n" ,sizeof(int));  //4bit,同上
  • printf("%zu\n" ,sizeof(short));  //2bit
  • printf("%zu\n" ,sizeof(long));  //4bit
  • printf("%zu\n" ,sizeof(longlong));  //8bit
  • printf("%zu\n" ,sizeof(float));  //4bit
  • printf("%zu\n" ,sizeof(double));  //8bit
  • sizeof是测量数据类型长度的关键字
  • %zu,z代表sizeof的返回值,u代表unsign无符号,连起来就是无符号返回值即整型,有的编译器可以使用%d,有的不可以,只能使用%zu
  • 计算机中的单位:1pb=1024tb;1tb=1024gb;1gb=1024mb;1mb=1024kb;1kb=1024byte;1byte=8bit
  • 创建变量的本质是向内存申请空间,不同数据的类型所占字节不同
  • double比float更精准一点
  • 常量是性别、圆周率等不变的量

局部变量与全局变量

  • 局部变量是定义在花括号内局部起作用的变量,全局变量定义在花括号外,作用在整个工程
  • 局部变量不能使用同样的变量名,即不能重复定义
  • 全局变量和局部变量定义变量名重复时,局部变量优先
  • 创建变量时要初始化=0,若不初始化,则初始值会是一个随机值
  • scanf时别忘了取地址
  • extern 可以调用在同一工程下的全局变量,声明来自外部的符号
  • 例子全局变量的调用,与局部变量的用法:
#define _CRT_SECURE_NO_WARNINGS
int a = 30;
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int a = 30;
extern int a;
void test()//一个test函数,void代表返回值为空的函数,无返回
{
	printf("test-->%d\n", a);
}
int main()
{
	test();//test函数要使用必须在主函数内调用,即打印test函数内容
	int a = 20;
	{
		int a = 10;
			printf("%d\n", a);
	}
		printf("%d\n", a);
	return 0;
}

  • 变量的生命周期:局部变量的生命周期是,进入作用域生命周期开始,出作用域生命周期结束。全局变量的生命周期是,整个程序的生命周期。

常量

  • 字面常量:如20,30,3.14这种数字
  • const修饰的变量,不能被修改。
const int a = 10; //在c语言中的const修饰的a,本质是变量,但不能直接修改,具有变量的属性。
a = 20;//尝试修改变量a,但是实际执行时不会被修改
  • define定义的标识常量
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAX 100
#define STR "abcdef"
int main()
{
	printf("%d\n", MAX);
	int a = MAX;
	printf("%d\n", a);
	printf("%s\n", STR);
	return 0;
}

  • 标识符常量定义后不能被修改
  • 枚举常量
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
enum color
{
	//枚举常量
	RED,
	GREEN,
	BULE
};
int main()
{
	int num = 10;
	enum color c = RED;//c 是变量,把枚举常量RED赋值给变量c,enum color被定义为一种类型,像int、float一样,定义变量时才可以在内存中开辟空间存储数据
    RED = 10;//error,因为枚举常量是常量不能被修改赋值
	return 0;
}

字符串

char arr1[] = "abcdef";//双引号内隐含着'\0',内部有7个字符
char arr2[] = {'a','b','c','d','e','f'};//内含6个字符,并无'\0'。若执行打印该行,则会出现乱码,直至在数据中寻找到‘/0'后才结束打印并输出
  • 编译执行时,'\0'作为打印字符串的终止符,没有遇到'\0'便不结束打印
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = { 'a','b','c','d','e','f','\0'};//7
	char arr2[] = "abcdef";//7

	int len = strlen("abc");//strlen是求字符长度的一个函数 string length  ,他是一个库函数,使用时需调用头文件string.h。此行是求字符串长度得到一个返回值存到len变量中
	//printf("%d\n", len);
	printf("%d\n",strlen(arr1));
	printf("%d\n", strlen(arr2));

	return 0;
}
  • strlen求字符长度时也是遇到'\0'截至符,截至计数,若arr1中无\0则会直至寻找到数据库中的\0后截至,这便是一个随机值

  • 求字符长度的一个函数 string length 头文件string.h

  • /0本质是一个转义字符

转义字符

  • \?
    在书写连续多个问号时使用,防止他们被解析成三字母词
  • \'
    用于表示字符常量'
  • \”
    用于表示一个字符串内部的双引号
  • \\
    用于表示一个反斜杠,防止它被解释为一个转义序列符。
  • \a
    警告字符,蜂鸣
  • \b
    退格符
  • \n
    换行
  • \r
    回车
  • \t
    水平制表符
  • \v
    垂直制表符
  • \ddd
    ddd表示1-3个八进制的数字。如: \130 X
  • \xdd
    dd表示2个十六进制数字。 如: \x30 0
  • ??)是三字母词,旧版编译器可能会打印成“]”,在前加\即可避免?被识别成三字母词\?\?)
  • 若想打印 ' ,则\ '
  • 若想打印/n,则\\n
  • \ddd,如\130,他是表示130是一个8进制数字,把他转化为十进制数字88后,再对应成ACII码值,为X
  • \xdd,如\x30,他是表示30是一个16进制数字,把他转化为十进制数字3*16=48后,再对应ACII码值,为0
  • %d打印整型,%c打印字符型,%s打印字符串类型,%f打印浮点型,%lf打印double型,%zu打印sizeof的返回值

注释

  • 第一种方法/* */  缺点不能嵌套,容易出错
  • 第二种方法//

选择语句与循环语句

  • 选择:if else ;switch case break
  • 循环:for ;while ;do while
  • #include<stdio.h>
    
    int main()
    {
      int line = 0;
      printf("开始学习\n");
    
      while(line < 20000)
    
    {
      printf("写代码:%d\n" , line);
      line++;
    }
      if(line >= 20000)
      {
       printf("拿到好的Offer\n");
      }
      else
      {
       printf("继续加油!\n");
      }
      return 0;
    
    }

    函数

  • #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    
    int ADD(int x, int y)
    {
    	return (x + y);
    }
    int main()
    {
    	int a = 0;
    	int b = 0;
    	scanf("%d %d", &a, &b); //此处输入时%d后不需要加\n换行,若加了还得输入换行符才能进行运算
    	int sum = ADD(a, b);
    	printf("%d\n", sum);
    	return 0;
    }

    数组

  • 定义声明时,int arr[4] = {1,2,3,4},[ ]可以空着,自动识别花括号内的元素数量;
  • 当想调用上图编号8的数组元素,即可以直接输入arr[8],这时便是18

  • 不完全初始化,数组空间是4,但里面实际放3个元素,后面默认放入为0,而\0的ACCII码值为0,所以会被认作终止符\0,strlen识别为3个
  • 若char arr[3] = {'b' , 'i' , 't '},则会被strlen识别为随机值,因为找不到\0终止符。
  • int arr[n] = {},这种写法是不对的,数组方括号里不允许出现变量

操作符

  • 数组内一个元素大小是4个字节,10个元素就是40

int a = (int)3.14;//(int)把浮点数强制转换为整型数
int a = int(3.14);//error 写的像函数形式了

 

 

 

  •  此时的n不是变量,因为n=3,代表下标为3的数组元素,即4
  • 因为此时()代表函数调用操作符不可省略,而sizeof(int)的括号可以省略,因为其不是操作符。

常用关键字

 

typedef

  • typedef 是type define 的简写,意思是重新定义类型。类型名字较长时不方便打字,用typedef重新定义类型名字为较短的代号方便打字

  • static

  • 正常定义变量时,用的类型如:int,会省略其前面的关键字auto,这个是默认进入局部变量范围自动生成,出局部变量时自动销毁的关键字。
  • 定义变量时在类型前面加上static时,会使局部变量出范围后不销毁,若循环时仍然继续使用之前定义的变量,而不需要重新创建。
  • void类型表示不需要任何返回值,如果函数里面有return 0; 时有返回整数值,这时考虑用相应的int类型,若是不返回仅仅打印字符,就可以使用void关键字。

  • 注意:此处外部文件关键字有static,若没有static则其他文件可以使用exern调用,若有static则外部定义变量不可以被其他文件调用,仅仅可以让自己的文件调用,这是有保护作用,不让外部文件调用。这是定义全局变量的用法。
  • static类型声明函数时也是不能被外部调用(和static声明全局变量的用法类似)
  • 注意此处register关键字是建议把该变量放置在寄存器内,但是不一定真的会放到寄存器内,编译器会自动判断这个变量调用的次数多不多,是否放入由编译器自行决定。(毕竟寄存器的空间非常小)

 

指针

 

  • 上两个图表示意思是一样的,但注意区别只有p1是指针,其他的没有*号不是指针是整型变量

  • 这样才算是定义三个指针!

结构体

  • 和定义整型时意思差不多,struct Stu是类型,s是变量。

  • 注意打印结构体时的结构,打印顺序一定不能乱,顺序不对编译器会崩溃的。

  • 另一种函数的取地址打印方法,注意区分.操作符和->操作符的用法区分,和结构体对象打印和取地址利用指针变量打印的方法。
  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值