C语言学习-知识点补充


  • 文章内的内容是复习时针对之前没有整理到的内容的补充,如有错误或不详,敬请指出。

学习重点

  • 流程控制
  • 函数
  • 指针
  • 静态内存和动态内存

内存的分配与释放

  • 分配内存
    • 操作系统为程序分配一块内存空间,程序具有对这块内存的读写权限
  • 释放内存
    • 操作系统收回为程序分配的内存空间,并不会清理内存中的数据,只收回程序对该存储空间的读写权限

变量初始化

  • 变量必须初始化
    • 不初始化,会使用垃圾数据填充,可能会导致计算结果有误
  • 系统如何执行int i = 5;
    • 软件请求为变量i分配存储空间,该存储空间用于存放i变量
    • 之后对变量i的操作即对这块存储空间进行读写操作
    • 将数值5存放在分配给变量i的存储空间中

数据基本类型及输出

  • 基本类型
    • intlong intshort intcharfloatdouble
  • printf对不同数据类型的输出
    • intshort int%d
    • long int%ld
    • char%c
    • float%f
    • double%lf
    • %p:对变量的地址进行输出
    • %e:以科学计数法输出
  • 字符串的输出%s
  • 以八进制数输出%o
  • 以十六进制输出%x%#X
  • printf输出
    • :换行
    • :空格
    • %m.nf:表示输出double类型的数据时,总共占 m 个字符,保留 n 位小数
      • 如果输出的结果不够 m 位,则用空格补充,m 为负数表示把空格补充在数值后面
  • char对字符的处理
    • 大写字母加32可以得到它的小写字母
    • 小写字母减32可以得到它的大写字母
    • putchar():输出字符变量
    • getchar():从键盘输入字符变量

# include <stdio.h>

int main(void)
{
	int a;

	printf("请输入一个大写字母:");
	a = getchar();

	a = a + 32;

	putchar(a);
	putchar('
');

	return 0;
}
/*运行结果*/
请输入一个大写字母:Q
q
Press any key to continue
  • 强制数据类型转换
    • (数据类型)(表达式):强制将表达式的计算结果转换为前面的数据类型
    • 可以用于计算输出一个数的每个位上的数值

函数与指针

  • 函数的优点
    • 避免重复操作
    • 有利于程序的模块化
  • 指针,地址,指针变量
    • 指针和地址是相同的,表示内存单元的编号
    • 指针变量是存放内存单元编号的变量
  • static作用
    • 可用作函数和变量的前缀,用于隐藏函数
    • 对于变量
      • 保持变量内容的持久,全局变量和static变量存储在静态存储区,静态存储区的变量只会在程序运行时完成初始化,也是唯一的一次初始化
      • 默认初始化为0

/*static用法*/
# include <stdio.h>

int func(int a, int b);

int main(void)
{
	int k = 4,m = 1, p;

	p = func(k, m);    //8
	printf("p1 = %d
", p); 

	p = func(k, m);
	printf("p2 = %d
", p);

	p = func(k, m);
	printf("p3 = %d
", p);

	return 0;
}

int func(int a, int b )
{
	static int m = 0, i = 2;
	/*
		static只有在第一次执行的时会初始化变量
		函数结束后,变量不会被释放
		下一次被调用时,变量不会被重新赋值,而是使用之前的值
	 */
	printf("m = %d	", m);
	printf("i = %d
", i);
	i += m + 1;        //2+0+1=3   3+8+1=12   12+17+1=30
	m = i + a + b;     //3+4+1=8   12+4+1=17  30+4+1=35

	return (m);
}
  • 在func函数中,m和i只有第一执行时被赋值,之后再被调用时,使用的是之前的值
/*运行结果*/
m = 0, i = 2
p1 = 8
m = 8, i = 3
p2 = 17
m = 17, i = 12
p3 = 35
Press any key to continue

静态内存与动态内存

  • 静态内存和动态变内存
    • 相同点:都需要分配内存空间
    • 不同点:
      • 静态内存是系统自动分配的,自动释放,不能手动释放,存储空间的分配是在栈中分配,函数终止后,分配给该变量的存储空间会被释放
      • 动态内存是手动分配的,手动释放,可以在程序运行的过程中手动分配和释放,存储空间实在堆中分配的

数学公式

  • ex、log等数学运算
  • 前提:程序要写# include <math.h>这个头文件
函数功能使用方法函数功能使用方法
abs求整数 x 的绝对值int x;
abs(x);
exp求exdouble x;
exp(x);
fabs求整数 x 的绝对值int x;
abs(x);
pow求xydouble x, y;
pow(x, y);
sin求 sinx 的值double x;
sin(x);
sqrt x sqrt{x} x double x;
sqrt(x);
cos求 cosx 的值double x;
cos(x);
log求Inxdouble x;
log(x);
tan求 tanx 的值double x;
tan(x);
log10求lgxdouble x;
log10(x);

以上内容均属原创,如有不详或错误,敬请指出。
做别人的宝贝,别来淌我这趟浑水。
原文地址:https://www.cnblogs.com/bad5/p/14633762.html