个人做同城网站赚钱吗,潍坊网站制作最低价格,网站空间一年多少钱,提高网站排名指针速览 指针1.野指针与空指针2. 空类型指针 void *3. 指针常量4. 常量指针5. 指向常量的指针常量6. 指针操作数组6.1 数组名作为函数参数 7. 多级指针8. 函数指针8.1 函数指针数组 最后 指针
指针就是内存的字节单元编号地址#xff0c;指针变量就是存放地址的变量。
1.野… 指针速览 指针1.野指针与空指针2. 空类型指针 void *3. 指针常量4. 常量指针5. 指向常量的指针常量6. 指针操作数组6.1 数组名作为函数参数 7. 多级指针8. 函数指针8.1 函数指针数组 最后 指针
指针就是内存的字节单元编号地址指针变量就是存放地址的变量。
1.野指针与空指针 野指针是指指针变量被赋值了一个随意的数值这个数值并不是已知变量的内存地址这个数值指向的区域未知导致这个指针没有实际意义如果对这个指针指向的内存区域进行操作还会导致错误。 例如下面都是野指针
int *p;
p0x12345678;//给指针变量赋值了一个随意的数值
*p20; //对未知区域赋值报错
//输出报错段错误
Segmentation fault (core dumped)int a123;
pa; //给指针变量赋值了一个随意的数值 空指针是指指针变量没有指向任何变量该指针变量空闲可用。用代码表示就是 该指针变量指向NULL。NULL是一个值为0的宏常量。
#define NULL ((void *)0)
//空指针
int *pNULL;2. 空类型指针 void * void * 可以指向任何变量的内存空间是一个万能指针。
//可以写成 void *p NULL; 初始化//案例
void *p;
int a100;
char cW;pNULL;
//p(void *)a;
pa;
printf(%d\n,*(int *)p); //输出100//p(void *)c;
pc;
printf(%c\n,*(char *)p); //输出W3. 指针常量
意思是这个指针变量是一个常量指向的地址不能改变也就是指针变量的内容不能变指向的值可以变
int i 9;
//指针常量
int *const p i;
//改变指向的值
*p 3;4. 常量指针
指针的指向可以变指向的值不能变
int i9;
int j10;
int const *p i; //或者const int *p i;
printf(%d\n,*p); //输出9
//*p20; //修改指向的值报错
pj; //修改指向
printf(%d\n,*p); //输出105. 指向常量的指针常量
既不能修改指向又不能修改指向的值
int i 9;
int const *const p i; //或者 const int const *p i;6. 指针操作数组
数组名就是数组的地址。
int a[10]{1,2,3,4,5,6,7,8,9,0};
int lensizeof(a)/sizeof(a[0]);
int i;
//方式一使用i变量
for(i0;ilen;i)
{printf(%d,,*(ai));
}
printf(\n);
//方式二使用临时指针变量int *pa;
for(i0;ilen;i)
{printf(%d,,*p);p;
}//输出
1,2,3,4,5,6,7,8,9,0,
1,2,3,4,5,6,7,8,9,0,6.1 数组名作为函数参数
void printArr(int *a,int len)
{int i;for(i0;ilen;i){printf(%d,, a[i]);//printf(%d,, *(ai));}printf(\n);
}int main()
{int a[]{1,2,3,4,5};int lensizeof(a)/sizeof(a[0]);printArr(a,len);return 0;
}7. 多级指针
int m10;
int *nm; //*n就是m
int **in; //*i就是n**i就是m
int ***ji; //*j就是i**j就是n***j就是mprintf(%d\n,*n); //10
printf(%d\n,**i); //10
printf(%d\n,***j); //108. 函数指针
函数名就是函数的地址说明函数也是存在内存中的可以利用它的地址调用函数。
函数指针可以指向同类型的函数要求参数类型返回值一样。
函数指针就是一个指针指向的是一个函数。
#include stdio.hint sum(int a,int b);
int des(int a,int b);
int mul(int a,int b);int main()
{//定义一个函数指针指向的函数返回值是int参数是 intint int(* pfun)(int a,int b)NULL;//赋值//直接使用 pfunsum; 也可以pfunsum;printf(%d\n,pfun(1,2)); //3pfunmul;printf(%d\n,pfun(4,2)); //8pfundes;printf(%d\n,pfun(5,3)); //2return 0;
}int sum(int a,int b)
{return ab;
}int des(int a,int b)
{return a-b;
}int mul(int a,int b)
{return a*b;
}8.1 函数指针数组
#include stdio.hint sum(int a,int b);
int des(int a,int b);
int mul(int a,int b);int main()
{//定义一个函数指针指向的函数返回值是int参数是 intint int(* pfun[3])(int a,int b){sum,des,mul};int i;for(i0;i3;i){printf(%d\n,pfun[i](10,5));}return 0;
}int sum(int a,int b)
{return ab;
}int des(int a,int b)
{return a-b;
}int mul(int a,int b)
{return a*b;
}//输出
15
5
50最后
推荐一个零声教育学习教程个人觉得老师讲得不错分享给大家[LinuxNginxZeroMQMySQLRedis fastdfsMongoDBZK流媒体CDNP2PK8SDocker TCP/IP协程DPDK等技术内容点击立即学习:链接