空间做子网站,网站策划的重要性,监控性能网站模板,怎么用手机做网站服务器如果有不会的智识点#xff0c;请移动到博主前四篇指针博客#xff01;
可以当一个指针智商检阅博客看。
看看你是否掌握了这些知识
1#xff1a;内存#xff0c;指针变量
内存单元的编号地址指针#xff1b;
指针变量和其他变量没有区别#xff0c;指针变量是来存放…如果有不会的智识点请移动到博主前四篇指针博客
可以当一个指针智商检阅博客看。
看看你是否掌握了这些知识
1内存指针变量
内存单元的编号地址指针
指针变量和其他变量没有区别指针变量是来存放指针的类型有很多。
2指针的类型这是指针
1野指针野狗
1野指针的成因
1指针没初始化
2指针越界访问
3指针指向的空间释放
2野指针的危害
直接让程序崩溃
3如何避免野指针
1你怕崩溃使用assert断言提前检测
2指针初始化注意范围释放完成及时加上NULL
2字符指针变量char*
3数组指针变量
1指针指向的是数组的地址
2格式和初始化
int arr[5] {1,2,3,4,5};
//初始化指针名是p
int (*p)[5] arr;
注意数组元素类型注意数组元素个数
格式int (*)[5]
初始化就是加上数组名
4函数指针变量
1指针变量指向函数地址
2格式和初始化
int add(int x,int y)
{return xy;
}
int main()
{
int (*p)(int x,int y)add;
//也可初始化成int (*P)(int,int);省略形参x和yreturn 0;
}
//int是函数返回类型
//p是函数指针变量名
//(int,int)是函数形参类型
注意函数返回类型和函数形参类型。
5二级指针三级指针等
就是指针变量存放指针变量的地址只要我们要创建变量就要在内存中开辟空间开辟空间就会产生地址产生地址就可以用指针变量来储存
int main()
{
int a10086;
//一重指针
int*p1a;
//二重指针
int**p2p1;
//三重指针
int***p3p2;
return 0
}
3指针数组和函数指针数组这是数组后缀是数组就是数组
1指针数组
存放指针的数组可以存放任何类型的指针只要你的指针类型写的对。
int main()
{
int arr1[5]{1,2,3,4,5};
int arr2[5]{6,7,8,9,10};
//这是两个数组指针的初始化
int (*e1)[5]arr1;
int (*e2)[5]arr2;
//这是指针数组的初始化
int* p[5]{e1,e2};
return 0;
}
还是注意要存放指针的类型
2函数指针数组
其实和指针数组也没什么区别就是指针类型是函数指针罢了
int add(int x,int y)
{
return xy;
}
int div(int x,int y)
{
return x/y;
}int main()
{
//函数名就是函数的地址我就不取额外的函数指针变量了
int (*p[2])(int,int){add,div}
return 0
}
4数组名的理解重点重点重点
1数组名就是是数组首元素的地址除了两种情况
1sizeof(数组名
sizeof中单独存放数组的时候数组名表示整个数组计算整个数组的大小一定是单独
2数组名
这里将数组存入数组指针变量时数组名表示整个数组的地址整个数组的地址和首元素的地址有区别
2二维数组名的理解
二维数组可以看成是多个一维数组集合而来元素就是一维数组
由此二维数组的数组名就表示第一行一维数组的地址。
#includestdio.h
void test1(int arr[][5], int x, int y)
//void test1(int(*p)[5], int x, int y)
{for (int i 0;i x;i){for (int j 0; j y; j){//printf(%d , *(*(p i) j));printf(%d ,arr[i][j]);}printf(\n);}printf(\n);
}
void test2(int* p[5], int x, int y)
{for (int i 0; i x; i){for (int j 0; j y; j){//printf(%d ,*(*(pi)j));printf(%d ,p[i][j]);}printf(\n);}
}
int main()
{int arr1[5] { 1,2,3,0,0 };int arr2[5] { 4,5,6,0,0 };int arr3[5] { 7,8,9,0,0 };int arr4[3][5] { {1,2,3,0,0},{4,5,6,0,0},{7,8,9,0,0} };int* (p[3])[5] { arr1,arr2,arr3 };test1(arr4, 3, 5);test2(p, 3, 5);return 0;注意上述代码的三种传参方式和数组类型。
p是数组指针数组是一个数组模拟实现二维数组。