C语言提高复习01

花时间仔细复习一下:

基础:c语言语法基础+数据结构+系统编程

提升:接口封装与设计(模块划分、断层思维)+ 接口api使用能力、查找能力、实现能力

跳跃:win+linux项目

简单的排序功能:

#include "stdlib.h"
#include "string.h"
#include "stdio.h"

//排序
void main01()
{
	int		i = 0,j = 0;
	int		tmp = 0;
	int a[] = {33,654,4,455,6,33,4};

	printf("排序之前\n");
	for (i=0; i<7; i++)
	{
		printf("%d ", a[i]);
	}
	
	//排序

	//外层循环	当i=0的时候, 让j从1===N进行变化
	//外层循环	当i=1的时候, 让j从2===N进行变化
	//			当i=2的时候, 让j从3===N进行变化
	//结论: 按照一个变量i不变,让另外一个变量j进行变化;下一轮 依次进行

	for(i=0; i<7; i++)  
	{
		for (j=i+1; j<7; j++)  //内层循环: a[i] 和 a[j]比较
		{
			if (a[i] > a[j])
			{
				tmp = a[i];
				a[i]= a[j];
				a[j] = tmp;
			}
		}
	}

	printf("排序之后\n");

	for (i=0; i<7; i++)
	{
		printf("%d ", a[i]);
	}

	printf("hello...\n");
	system("pause");
}


//void printArray(int a[7], int num)
//void printArray(int a[], int num)
void printArray(int *a, int num)
{
	int i = 0;
	for (i=0; i<num; i++)
	{
		printf("%d ", a[i]);
	}
}

void sortArray(int a[7], int num)
//void sortArray(int a[], int num)
//void sortArray(int *a, int num)
{
	int i , j , tmp ;
	int		num2 = 0;

	num2 = sizeof(a)/sizeof(a[0]);
	printf("num:%d \n", num2);
	//实参的a 和 形参的a 的数据类型本质不一样
	//形参中的数组 ,编译器会把它当成指针处理 这是C语言的特色
	for(i=0; i<num; i++) 
	{
		for (j=i+1; j<num; j++)  //内层循环: a[i] 和 a[j]比较
		{
			if (a[i] > a[j])
			{
				tmp = a[i];
				a[i]= a[j];
				a[j] = tmp;
			}
		}
	}
}

//数组做函数参数的退回问题  退回为一个指针, 
//1 正确做法:把数组的内存首地址和数组的有效长度传给被调用函数
//2 //实参的a 和 形参的a 的数据类型本质不一样
	//形参中的数组 ,编译器会把它当成指针处理 这是C语言的特色
	//排序 本质也剖析 
//3 形参写在函数上,和写在函数内是一样的,只不过是具有对外的属性而已.
void main22()
{
	int		i = 0,j = 0;
	int		tmp = 0;
	int		num = 0;
	int a[] = {33,654,4,455,6,33,4,3333};
	num  = 7;

	num = sizeof(a)/sizeof(a[0]);
	printf("num:%d \n", num);

	printf("排序之前\n");
	printArray(a, num);

	//排序

	//外层循环	当i=0的时候, 让j从1===N进行变化
	//外层循环	当i=1的时候, 让j从2===N进行变化
	//			当i=2的时候, 让j从3===N进行变化
	//结论: 按照一个变量i不变,让另外一个变量j进行变化;下一轮 依次进行

	sortArray(a, num);

	printf("排序之后\n");
	printArray(a, num);

	printf("hello...\n");
	system("pause");
}

输出:

排序之前
33 654 4 455 6 33 4 排序之后
4 4 6 33 33 455 654 hello...

结论:1、数组做函数参数会退化为指针,实参的a为数组,传给形参的a是指针,数据类型本质不一样;形参中的数组 ,编译器会把它当成指针处理,这是C语言的特色,

2、且形参和函数内变量一样,临时栈上内存。形参写在函数上,和写在函数内是一样的,只不过是具有对外的属性而已.

数据类型本质:固定内存大小的别名;

数据类型的作用编译器预算对象(变量)分配的内存空间大小

  • 求数据类型的大小sizeof(int *)

int b[10];

b 代表的数组首元素的地址
&b代表的是整个数组的地址  

数据类型别名:

//复杂数据类型
typedef struct Teacher2
{
	char name[64];
	int age;
}Teacher2;
//数据别名 typedef

//简单数据类型
typedef int u32;

数据类型封装:

                 int InitHardEnv(void **handle);

  • 1、void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
  • 2、用法1:数据类型的封装
  •      典型的如内存操作函数memcpy和memset的函数原型分别为

                      void * memcpy(void *dest, const void *src, size_t len);

                      void * memset ( void * buffer, int c, size_t num ); 

  • 3、用法2:  void修饰函数返回值和参数,仅表示无。
  •        如果函数没有返回值,那么应该将其声明为void型

           如果函数没有参数,应该声明其参数为void

           int function(void)

           {return 1;}

  • 4、void指针的意义 
  •       C语言规定只有相同类型的指针才可以相互赋值

          void*指针作为左值用于“接收”任意类型的指针

          void*指针作为右值赋值给其它指针时需要强制类型转换

          int *p1 = NULL;

          char *p2 = (char *)malloc(sizoeof(char)*20);

  • 5、不存在void类型的变量
  •       C语言没有定义void究竟是多大内存的别名

  • 6、扩展阅读《void类型详解.doc》

数据类型总结与扩展

  • 1、数据类型本质是固定内存大小的别名;是个模具,c语言规定:通过数据类型定义变量。
  • 2、数据类型大小计算(sizeof)
  • 3、可以给已存在的数据类型起别名typedef
  • 4、数据类型封装概念(void 万能类型)

变量本质:

变量:能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。

变量本质:

1、程序通过变量来申请和命名内存空间 int a = 0

2、通过变量名访问内存空间

(一段连续)内存空间的别名(是一个门牌号)

3、修改变量有几种方法?

1、直接

2、间接。内存有地址编号,拿到地址编号也可以修改内存;于是横空出世了!(编程案例)

3、内存空间可以再取给别名吗?引用

//重要实验:
int  main333()
{
	//
	//2种方法,通过变量直接操作内存
	//	通过内存编号操作内存

	int i = 0;

	printf("&i:%d\n", &i);

	*((int *)(1245024)) = 10;
	printf("i:%d", i);
	printf("hello....\n");
	getchar();
	return 0;
}

变量总结:

1 对内存,可读可写;2通过变量往内存读写数据;3 不是向变量读写数据,而是向变量所代表的内存空间中写数据。问:变量跑哪去了?

思考1:变量三要素(名称、大小、作用域),变量的生命周期?

思考2:C++编译器是如何管理函数1,函数2变量之间的关系的?

内存四区建立流程:

流程说明

1、操作系统把物理硬盘代码load到内存

2、操作系统把c代码分成四个区

3、操作系统找到main函数入口执行

 字符串常量在全局区。

理解指针的关键在于内存

栈的生长方向与数组b[10]中b的生长方向,是不同的概念。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
C语言程序设计复习资料主要包括基础知识、语法规则、数据类型、控制结构、函数、数组、指针、字符串、结构体、文件操作等内容。 首先,基础知识是C语言程序设计的基础,包括C语言的起源、发展历程、特点等。了解这些可以更好地理解C语言的设计思想和使用方法。 其次,掌握C语言的语法规则非常重要。包括标识符命名规则、注释的使用、变量和常量的定义及使用、运算符、表达式和语句等。熟悉这些规则可以编写正确的C语言程序。 再者,掌握C语言的数据类型是编程的基础。包括整型、浮点型、字符型等基本数据类型,以及数组、结构体、联合等复合数据类型。了解它们的特点和使用方法可以更灵活地处理数据。 除此之外,掌握C语言的控制结构也是非常重要的。包括顺序结构、分支结构和循环结构。掌握这些结构可以编写出具有逻辑性的程序。 另外,函数是C语言的一个重要组成部分。掌握函数的定义、声明、调用和返回值的处理可以提高程序的模块化和可读性。 此外,数组和指针是C语言中常用的数据结构。熟悉数组的定义、初始化和元素访问以及指针的定义、赋值和操作可以更方便地处理各种数据。 同时,字符串的处理在实际编程中也非常常见。包括字符串的定义、初始化、比较、拼接以及与字符数组之间的相互转换等。 最后,了解文件操作是C语言程序设计中必备的技能。包括文件的打开、关闭、读取和写入等。掌握文件操作可以实现程序与外部文件之间的数据交互。 总之,C语言程序设计复习资料应该包括以上内容,通过学习和练习这些知识,可以帮助我们更好地掌握C语言提高编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值