程序员成长之旅——初识c语言(浅谈)

程序员成长之旅——初识c语言(浅谈)

    • c语言是什么?
    • 第一个c语言程序
    • 数据类型
    • 变量常量
        • 变量的定义
        • 变量的分类
        • 变量的使用
            • 变量的作用域和生命周期
        • 常量
    • 字符串+转义字符+注释
        • 字符串
        • 转义字符
        • 注释
    • 选择语句
    • 循环语句
    • 函数
    • 数组
            • 数组的定义
            • 数组的使用
    • 操作符
    • 常见关键字
            • 关键字 typedef
            • 关键字 static
            • 修饰局部变量
            • 修饰全局变量
            • 修饰函数
    • #define定义常量和宏
    • 指针
            • 指针变量的大小
    • 结构体

c语言是什么?

C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

第一个c语言程序

#include
int main()
{
	printf("hello\n");
	return 0;
}

数据类型

char             //字符数据类型
short            //短整型
int                //整形
long            //长整型
long long     //更长的整形
float               //单精度浮点数
double         //双精度浮点数

变量常量

一般普通变量:如123,3.5,“abc”, ‘a’ 很容易识别以变量形式展现的,要看标识符的定义形式,才能确定该标识符是常量,还是变量,如:const int a=5 ; //常量 有const修饰,变量不能修改int b=34; //变量#define 定义的宏,即不是常量也不是变量

变量的定义

int age=50;
float weight=45f;
char ch='d';

变量的分类

  • 局部变量
  • 全局变量
#include
int global=2019;//全局变量
int main()
{
	int local=2018;//局部变量
	//下面定义的global会不会有问题
	int global=2020;//局部变量
	printf("global = %d\n", global);
	return 0;
}

程序员成长之旅——初识c语言(浅谈)_第1张图片

总结:上面代码是没有任何问题的,当局部变量和全局变量相遇时优先局部变量。

变量的使用

程序员成长之旅——初识c语言(浅谈)_第2张图片

变量的作用域和生命周期

作用域

作用域(score)程序设计概念,一段程序代码中所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程。
    生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

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

常量

c语言中的常量和变量定义的形式有所差异。
c语言中的常量分为以下几种:

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
enum Sex
{
        MALE,//枚举常量
	FEMALE,
	SECRET
};
int main()
{
        3.14;//字面常量
	1000;//字面常量
	const float pai = 3.14f;  //const 修饰的常量
	pai = 5.14;//ok?
#define MAX 100            //#define的标识符常量    
	system("pause");
	return 0;
}

字符串+转义字符+注释

字符串

"hello \n"

这种由双引号引起来的一串字符称为字符串字面值,简称字符串。
注意:字符串结束标志是一个\0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

转义字符

程序员成长之旅——初识c语言(浅谈)_第3张图片
程序员成长之旅——初识c语言(浅谈)_第4张图片程序员成长之旅——初识c语言(浅谈)_第5张图片
程序员成长之旅——初识c语言(浅谈)_第6张图片

注释

  • 代码中有不需要的代码可以直接删除,也可以注释掉
  • 代码中有些比较难懂的可以加一下注释文字
    比如:
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int Add(int x, int y)
{
 	return x + y;
}
/*C语言风格注释//不能嵌套注释
int Sub(int x, int y)
{
   	 return x-y;
}
*/
int main()
{
 	//C++注释风格//可以注释一行也可以注释多行
 	//int a = 10;
 	//调用Add函数,完成加法
 	printf("%d\n", Add(1, 2));
 	return 0;
}

选择语句

C语言条件控制语句选择结构,是属于计算机的语言编辑,有在C语言条件控制中的语句选择结构的存在,即是C语言条件控制语句选择结构。

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
int main()
{
	 int coding = 0;
 	printf("你会去敲代码吗?(选择1 or 0):>");
 	scanf("%d", &coding);
 	if (coding == 1)
	 {
 		 printf("坚持,你会有好offer\n");
	 }
 	else
 	{
  		printf("放弃,回家卖红薯\n");
	 }
 	system("pause"); 
        return 0;
}

循环语句

C语言循环控制语句是一个基于C语言的编程语句,该语句主要有while循环语句、do-while循环语句和for循环语句来实现循环结构。

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int mian()
{
 	printf("作为一个程序员");
 	int line = 0;
 	while (line <= 20000)
	 {
 		 line++;
  		printf("我要继续努力敲代码\n");
	 }
	 if (line> 20000)
 	printf("赢取白富美\n");
 	system("pause");
 	return 0;
}

函数

#define _CRT_SECURE_NO_WARNINGS 1
#include 
int main()
{
 	int num1 = 0;
 	int num2 = 0;
 	int sum = 0;
	 printf("输入两个操作数:>");
 	scanf("%d %d", &num1, &num2);
 	sum = num1 + num2;
 	printf("sum = %d\n", sum);
 	return 0;
}

函数的特点就是简化代码,上述代码写成函数如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int Add(int x, int y)
{
 	int z = x + y;
	return z;
}
int main()
{
 	int num1 = 0;
 	int num2 = 0;
 	int sum = 0;
 	printf("输入两个操作数:>");
 	scanf("%d %d", &num1, &num2);
 	sum = Add(num1, num2);
 	printf("sum = %d\n", sum);
 	system("pause");
 	return 0;
}

数组

所谓数组,是有序的元素序列。
[1]
若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。
[2]
这些无序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。

数组的定义
int arr[10]={ 1,2,3,4,5,6,7,8,9,10 };//定义一个整形数组,最多放10个元素
数组的使用
#define _CRT_SECURE_NO_WARNINGS 1
#include 
int main()
{
 	int i = 0;
 	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
 	for (i = 0; i < 10; i++)
	 {
 	 	printf("%d ", arr[i]);
 	}
 	printf("\n");
 	return 0;
}

操作符

指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。

算数操作符

+   -   *    /    %

移位操作符

>>      <<

位操作符

&    ^   |

赋值操作符

= += -= *= /=  &=  ^= |=  >>=  <<=

单目操作符

!                           逻辑反操作
-                           负值
+                           正值
&                           取地址
sizeof                      操作数的类型长度(以字节为单位)
~                           对一个数的二进制按位取反
--                          前置 后置--
++                          前置 后置++
*                           间接访问操作符
(类型)                      强制类型转换

关系操作符

>      >=    <   <=   !=   ==

逻辑操作符

&&           逻辑与
||           逻辑或

条件操作符

exp1 ? exp2 : exp3

逗号表达式

exp1,exp2,exp3,  ...... expN

下标引用丶函数调用和结构成员

[]   ()     .   ->

常见关键字

auto  break   case  char  const   continue  default  do   double else  enum   extern
float  for   goto  if   int   long  register    return   short  signed  sizeof   static
struct  switch  typedef union  unsigned   void  volatile  while
关键字 typedef

typedef 顾名思义是类型定义,这里应该理解为类型重命名。

比如:

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
 	//观察num1和num2,这两个变量的类型是一样的
 	unsigned int num1 = 0;
 	uint_32 num2 = 0;
 	return 0;
}
关键字 static

在c语言中:
static 是用来修饰变量和函数的

  1. 修饰局部变量
  2. 修饰全局变量
  3. 修饰函数
修饰局部变量

程序员成长之旅——初识c语言(浅谈)_第7张图片
程序员成长之旅——初识c语言(浅谈)_第8张图片

对比上面两个代码可以发现当static修饰局部变量时,它改变了变量的生命周期,让静态局部变量除了作用域依然存在,到程序结束,生命周期才结束。

修饰全局变量
//代码1
int g_val = 2018;
//test.c
int main()
{
 printf("%d\n", g_val);
 return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
 printf("%d\n", g_val);
 return 0;
}

对比可知,代码1正常,代码2会出现连结性错误。由此可知,一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件使用。

修饰函数
//代码1
//add.c
int Add(int x, int y)
{
 return c + y;
}
//test.c
int main()
{
 printf("%d\n", Add(2, 3));
 return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{
 return c + y;
}
//test.c
int main()
{
 printf("%d\n", Add(2, 3));
 return 0;
}

代码1正常,代码2错误。由此可知一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

#define定义常量和宏

程序员成长之旅——初识c语言(浅谈)_第9张图片

指针

内存

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
程序员成长之旅——初识c语言(浅谈)_第10张图片
指针的使用条例

#include 
int main()
{
	 int num = 10;
	 int* p = &num;
 	 *p = 20;
 	 return 0;
}

以整形指针为例,可以推广到其他类型,如:

#include 
int main()
{
 	char ch = 'w';
 	char* pc = &ch;
 	*pc = 'q';
 	printf("%c\n", ch);
 	return 0;
}
指针变量的大小
#include 
int main()
{
 	 printf("%d\n", sizeof(char*));
	 printf("%d\n", sizeof(short*));
 	 printf("%d\n", sizeof(int*));
	 printf("%d\n", sizeof(double*));
	 return 0;
}

指针大小在32位平台是4个字节,64位平台是8个字节。

结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含: 名字 + 年龄 + 性别 + 学号 这几项信息。
这里只能使用结构体来描述了。

例如:

struct Stu
{
 	char name[20];//名字
 	int age;      //年龄
 	char sex[5];  //性别
 	char id[15]//学号
};

结构体的初始化:

//打印结构体信息
struct Stu s = { "张三"20"男""20180101" };
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);

你可能感兴趣的:(C语言)