本章重点
讲解简单的指针和结构体
指针
指针是什么?
指针是存放它指向变量地址的变量
#include <stdio.h>
int main()
{
int a = 10;
int* p = &a;
return 0;
}
指针的大小:在32位平台上是4个字节,64位平台上是8个字节
指针和指针类型
指针类型
int a = 10;
int* pi = &a;
char* pc = &a;
short* ps = &a;
float* pf = &a;
double* pd = &a;
long* pl = &a;
指针类型的作用

指针类型决定了指针访问多少个字节,上面是char*类型的,只能访问一个字节
指针±整数

指针类型决定了指针的+1(-1)跳过多少个字节,int*类型+1跳过4个字节 
野指针
野指针就是指针指向的位置是不可知的
 
指针使用一定到初始化,因为不知道指针指向的位置,对它解引用会报错,找不到地址。
int main()
{
int arr[10] = { 0 };
int i = 0;
int* p = arr;
for (i = 0; i < 11; i++)
{
*(p + i) = i;
}
return 0;
}
int main()
{
int* p = NULL;
*p = 20;
return 0;
}
避免野指针 1.指针初始化 2.小心数组越界 3.指针使用完成后及时使它置为NULL 4.指针使用前检查有效性
指针运算
指针±整数

指针-指针

这是第10个元素的地址减去第1个元素的地址
指针的关系运算

二级指针
二级指针也是变量,它是存放一级指针变量地址的变量

指针数组
指针数组是一个数组,数组元素是指针类型

结构体
结构体的类型声明
结构体是一些值的集合
struct tag
{
char name[20];
int age;
char sex[5];
}s1;
int main()
{
s1 = { "zhangsan",19,"man" };
struct tag s2 = { "lisi",16,"man" };
return 0;
}
结构体成员的访问

可以用.操作符和->操作符访问结构体成员
结构体传参

结构体传参尽量用指针形式 因为如果不是指针形式, 结构体又太大,会造成参数压栈的系统开销太大 会导致性能下降
|