C函数
c语言是面向过程,c语言的源代码基本就是无数个函数的拼接
内存的最小单位为:byte比特 每个比特都有一个唯一不同的编号,每一个地址编号对应的是一个byte的空间大小
一个int占4个byte 所以占用了4个地址编号
32位下4字节无符号整数 64位下为8字节无符号整数
指针:
int *a;
int b=1;
a=&b;
int *a=&b;
输出a为输出的地址
②通过指针引用变量以及指针类型兼容
register代表寄存器存储类型 无法使用指针来指向地址
a代表指针指向的地址 *a代表指向的值而不是地址
&代表取地址
指针类型可能不兼容强转会出问题。
void *p2 可以指向任意类型的地址 void代表无类型。
③指针占内存的说明
指针的长度 无论是 long long *p 还是 int *p 长度都为8(64位)
④空指针和野指针
野指针
int *p;//这个交没有初始话过值的指针,被称为野指针
*p=100;//野指针变得不可控
空指针
指针变量没有明确的指向一块内存,那就指向NULL
NUll在c语言里面是一个宏常量,值为0
*p=null;//
⑤不同数据类型在内存中占地址编号说明:
char 2位 long long 8位 int 4位
⑥指针常量和常量指针
常量指针:
指向常量的指针 const int *p=&b;
不可以通过指针去修改b;
const int b=0;
int *p=&b;
可以通过指针p来修改,c语言漏洞 常用#define来声明常量
指针常量:
int *const p2 = &a;//p2只可以指向a不可以做修改
可以通过p2对a进行读写。
⑦指针和数组的关系
每个数组都有一个指针指向开头 当指针变相指向一个数组时,指针变量名可以当数组名,指向了a[0]的地址
指针可以指向数组中任何一个值 此时指针的下标和数组的下标不一样
⑧指针的运算
可以加减不可乘除
指针变量可以计算,如果int *类型加1变化4个整数 char *加1变化1个整数
long long *加1变化8个
使用加减,可以实现在一个数组中来回变化
⑨不同类型指针的区别与数组的关系
c语言中所有的数据类型都可以里理解为char的一个数组
在执行指针运算时 指针对运算不同
⑩ int类型和ip地址关系
ip地址:0.0.0.0 255.255.255.255
将任何一个输入的int类型转换位ip地址
点ip地址 如987654321 就是一个真实存在的地址 可以ping通
使用char型指针b指向无符号的int a ,b[3],b[2],b[1],b[0]输出出来就是IP地址