一、函数
函数是C程序的基础模块,是用于完成特定任务的程序代码单元。
1,分类:
(1)系统函数:即库函数,由辨析题提供的,用户不必自己定义这些函数,可以直接使用它们。如printf()
(2)用户定义函数:用以解决用户的专门需要。
2,作用:
函数的使用可以省去重复代码的编写,降低代码的重复率。
3,调用(5要素):
头文件:包含指定的头文件
函数名字:函数名字必须和头文件声明的名字一样
功能:需要知道此函数的作用
参数:参数类型匹配
返回值:更具需要接受返回值
例 产生随机数:
time(time_t*t)
//获取当前系统时间
//返回值:当前系统时间,time_t相当于long类型,单位为毫秒
void srand(unsigned int seed)
//用来设置rand()产生随机数时的随机种子
//如果每次seed相等,rand()产生随机数相等
int rand ()
//返回一个随机数
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
int main
{
srand((size_t)timer(NULL));
//time_t timer = time(NULL);
//srand((size_t)timer);
//添加随机数种子
for(int i=0;i<100;i++)
{
printf("%d",rand());
//约束:rand()%100 余数0-99 rand()%51+50 余数50-100
}
}
4,定义函数:
返回值类型 函数名(参数列表)
{
代码体
return a;
//返回值可以是数字,也可以是表达式
//一个return只能返回一个返回值
//返回值的类型取决于返回值类型
}
5,函数的形参和实参:
形参只能在该函数体才有效
单向传递,只能实参传给形参
6,void定义:无参数无返回值的定义函数
7,分类两种形式:
(1)先定义自定义函数再定义主函数——不需要声明
(2)先定义主函数再定义自定义函数——需要声明
8,声明和定义的区别:
(1)声明变量不许用建立存储空间,定义函数需要建立存储空间
(2)声明包含定义,定义是声明的一个特例
二、指针
1,内存含义:
存储器:计算机的组成中,用来储存程序和数据,辅助CPU进行运算处理的重要部分
内存:内部存贮器,暂停程序/数据
外存:外部存储器,长时间保存程序/数据
内存是沟通CPU与硬盘的桥梁:暂存CPU中的运行数据,暂存与硬盘等外部存储器交换的数据
内存地址:即是内存编号
将内存抽象成一个很大的一堆数组
编码就是对内存的每一个字节分配一个32位或64位的编号(与32位或者64位处理器相关)
如:char:占一个字节分配一个地址
int:占四个字节分配四个地址
2,指针的定义和使用:
(1)定义:指针类型:数据类型*
int a=0xaabbccdd 存储顺序:dd→aa
万能指针:
可以接受任意类型变量的内存地址
在通过万能指针修改变量的值时,需要找到变量对应的指针类型
(2)定义指针变量存储变量地址:
& 取地址运算符 升高维度
* 取值运算符 降低维度
int a = 10;
int* p;
p=&a; //将a的地址(指针)赋予p
printf("%p\n",&a);
printf("%p\n",p);
// 打印出来的地址相同
*p=100; //p地址的值被赋予100
printf("%p\n",a);
printf("%p\n",*p);
//打印都为100
若直接写int* p=100;表示的意思是把100这个地址赋予指针p
int* p=NULL;空指针是指内存地址编号为0的空间
操作空指针对应的空指针一定会报错 但是可以用作条件判断
(3)指针数据类型的大小:
printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(int*));
printf("%d\n",sizeof(short*));
printf("%d\n",sizeof(long*));
printf("%d\n",sizeof(long long*));
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
//x64下都是8字节大小 x84(32位)下都是4字节大小
所有的指针类型存储的都是内存地址,内存地址都是一个无符号十六进制整型数
3,const修饰:
修饰指针类型:
(1)可以修改指针变量的值
(2)不可以改变指针指向内存空间的值
const int* p=&a;
p=&b; //ok
*p=100; //err
修饰指针:
(1)不可以修改指针变量的值
(2)可以改变指针指向内存空间的值
int a=10,b=20;
int* const p=&a;
p=&b; //err
*p=200; //ok
修饰指针类型和指针变量:
不可以修改指针变量的值 和指针指向内存空间的值
*pp是一级指针的值 **pp是二级指针的值
可通过低级指针修改指针的值