C语言学习之旅

学习C语言的总结

同学习其他语言相比,学习C语言给我的第一感觉是很难,所以打算在这里记录自己的学习之旅。

一、C程序组成部分

在C语言程序的程序,主要包含以下三个部分:

  1. 头文件部分。在编译器编译程序时,会先编译头文件部分,这个编译过程也叫预编译过程
  2. 主函数部分,也就是main()函数部分,这个函数在源程序里只能有一个,不像其他函数能够有多个并存。这部分也是程序实现功能的的开始部分。
  3. 函数部分,其实主函数部分也是函数部分,只是由于它的特殊性,我觉得有必要单独分成一部分。函数的作用就是实现各种操作的功能,使得程序简单化。起到一个类似于封装的效果。

C语言与Matlab和Python有很多不同之处,其中最大的不同之处在于C语言需要自己去定义变量的类型,例如:

#include 
int main()
{
	int a = 3;
	return 0;
}

这里的a不能直接定义为

#include 
int main()
{
	a = 3;
	return 0;
}

而这在Matlab和Python里是可以的。
所以接下来记录一下变量的类型。

二、变量的类型

在C语言中,变量的类型主要包括字符型,短整型,长整型,整形,单精度浮点型,双精度浮点型,嗯…好像就这么多了,不知道漏了没。
字符型的变量在计算机内存所占内存的大小是1个字节,短整型是2个字节,整型变量是4个字节,长整型可以是4个,也有的编译器是8个,对于C语言的国际标准来说,只要大于整型变量的长度的变量就是长整型,单精度浮点数是4个,双精度是8个。注意,这里的一个字节表示8个bit位,也就是说一个字节可以保存8位二进制数,例如可以保存1111 1111。
下面我将在编译器里验证

# include 
int main()
{
	printf("字符型变量:%zd\n", sizeof(char));
	printf("短整型变量: %zd\n", sizeof(short int));
	printf("长整型变量:%zd\n", sizeof(long int));
	printf("整型变量:%zd\n",sizeof(int));
	printf("单精度浮点型变量:%zd\n",sizeof(float));
	printf("双精度浮点型变量:%zd\n", sizeof(double));
	return 0;
}

代码里我分别打印了各个变量类型的大小,其输出结果如下
C语言学习之旅_第1张图片

三、基本语句

这里还涉及到全局变量和局部变量,这和其他语言中的类似,在C语言中全局变量就是在函数之外(包含main()函数),局部变量指的是在函数里面,只能在对应的函数里面使用,这就引出了一个变量的作用域和生命周期。所谓作用域即是变量的使用范围或者领域,生命周期指的是一旦变量不能在相应的部分使用,就说明它的生命周期已经在这个部分结束。

for循环

# include 
int main()
{
	int i = 0;
	for (i; i < 5; i++)
	{
		printf("循环次数:%d\n", i);
	}
	return 0;
}

C语言学习之旅_第2张图片

while循环

# include 
int main()
{
	int i = 0;
	while(i < 5)
	{
		printf("循环次数:%d\n", i);
		i++;
	}
	return 0;
}

运行结果和for循环一样,此处就不展示结果了。

Switch循环

#include 
int main()
{
int a;
	printf("请输入一个数字:\n");
	while (1)
	{
		scanf("%d", &a);
		switch (a) {
		case 1: printf("a输入为:%d\n", a);
		case 2: printf("a输入为:%d\n", a);
		}

	}
	return 0;
}

四、指针

指针变量是用来存放变量地址的变量,例如将房子(这个房子是有门牌号的)这这个变量赋予一个值,假设这个值为人。那么门牌号就相当于指针变量,是一个地址。通过这个地址可以找到这个人(也就是这个值)。例子如下:

int main()
{
	int a = 0;
	int* p = &a;		//p是一个指针变量,所占空间为4个字节(编译器是32位)
	printf("%d\n", a);	
	printf("%d\n", *p);//*p是解引用操作,是把p里面存的地址的变量找出来
	*p = 1;
	printf("%d\n", a); //a的值是可以通过对地址的解引用操作之后,直接将新的值放到原有的地址下面
	//int a = 1;		//而这种情况不对的,不能对a再次初始化,正确编译的话,需要把该行去掉
	return 0;
}

五、结构体

这里就举一个构建结构体的例子,这里的BOOK,我现阶段的理解就是相当于一个类的名称,这个类里面有两个属性,分别位一个字符串型变量Name,长度为20个字节,另外一个是整型变量Price。“struct BOOK b1 = {“C语言程序设计”, 55}” 这句话是将具体的值赋给抽象的变量名称,我感觉这里就是实例化对象。
由于这里的书名是字符型的数组,而数组实质上是一个地址,这里修改书名只能利用strcpy进行修改,这里不能直接修改的原因仅仅是因为书名是个数组。比如这里的Price就可以直接通过pc变量的解引用操作而改变为15。

#include 

struct BOOK
{
	char Name[20];
	int Price;
};

int main()
{
	struct BOOK b1 = {"C语言程序设计", 55};
	struct BOOK* pc = &b1;
	printf("地址操作:%s\n",(*pc).Name);
	printf("原始操作:%s\n", b1.Name);
	printf("操作符:%s\n", pc->Name);
	printf("地址操作:%d\n", (*pc).Price);
	printf("原始操作:%d\n", b1.Price);
	printf("操作符:%d\n", pc->Price);
	strcpy((*pc).Name, "C++");
	printf("%s\n", pc->Name);
	(*pc).Price = 15;
	printf("%d\n", pc->Price);
	return 0}

C语言学习之旅_第3张图片

六、操作符

单目操作符

比如+,-,!等

双目操作符,

有按位与&,按位或|,与&&,或||,左移位操作符<<,右移位操作符>>,注意移位操作符是将整个二进制数移动,异或(相同为0,相异为1)。

三目操作符

(a>b?a:b)
例子如下:

#include 
int main()
{
int a = 10, b = 20;
	int c = (a > b ? a : b);
	printf("%d\n", c);
	return 0;
}

最后还有一些零碎的点,比如extern是用来声明外部的函数和变量,static是用来修饰静态变量的,它能保证局部变量不被销毁,延用语句结束时的值,还有创建枚举常量的enum,代码如下:
利用extern调用函数:

#define _CRT_SECURE_NO_WARNINGS
#include 
extern ADD(x, y);

int main()
{
	int a = 10, b = 20, c = 0;
	c = ADD(a, b);
	printf("%d\n", c);
}

包含ADD函数的另外一个.c文件如下:

#define _CRT_SECURE_NO_WARNINGS
int g = 10;
int ADD(int x, int y)
{
	int Sum = x + y;
	return Sum;
}

枚举常量的用法如下:

#define _CRT_SECURE_NO_WARNINGS
#include 

enum Color
{
	Yollow,
	RED,
	GREEN

};

int main()
{
	printf("%d\n%d\n%d\n", Yollow, RED, GREEN); //打印出来的结果是0 1 2
	
}

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