C语言tips-NULL指针和void指针
最近因为工作需要开始重新学c语言?越学越发现c语言深不可测?当初用python轻轻松松处理的一些数据?但是c语言写起来却异常的复杂?这个板块就记录一下我的c语言复习之路
1. void指针
1.1 解释
void 用在函数定义中可以表示函数没有返回值或者没有形式参数?用在这里表示指针指向的数据的类型是未知的,而void *表示一个有效指针?它确实指向实实在在的数据?只是数据的类型尚未确定?在后续使用过程中一般要进行强制类型转换。
void指针我们把它称为通用指针?就是可以指向任意类型的数据?也就是说?任何类型的指针都可以赋值给void指针
比较常见的**lloc函数默认返回的类型就为void*?**lloc函数原型? void *__cdecl **lloc(size_t _Size);
1.2 使用
在使用void指针的时候需要强制类型转换
#include <stdio.h>
int **in() {
int num = 1024;
int *pi = #
char *ps = "Fishc";
void *pv;
pv= pi;
printf("%d\n", *(int *)pv);
pv = ps;
printf("%s", (char *)pv);
return 0;
}
2. NULL指针
2.1 解释
NULL 是“零值、等于零”的意思"在 C 语言中表示空指针。从表面上理解"空指针是不指向任何数据的指针"是无效指针"程序使用它不会产生效果,我们可以在#include <stdio.h>在这个头文件找到NULL的定义:#define NULL ((void *)0),可以看到NULL是一个指针"他的类型为void *值为0
2.2 使用
NULL的使用还是比较广泛的"我们很多时候需要先定义一个指针类型然后再让其指向"这样的话我们就可以先初始化让他指向一个NULL"否则初始化定义的指针它的值是随机的"鬼只知道它会指向什么"我可以看看以下例子
例子1"
#include <stdio.h>
int **in(int argc, char* argv[])
{
// 初始化一个指针未给它初始化定义
char* str=NULL;
// 直接打印它所指向的值
printf("%s", str);
return 0;
}
我们在clion输出可以发现"直接可以打印一个(null)
#include <stdio.h>
int **in(int argc, char* argv[])
{
// 初始化一个指针未给它初始化定义
char* str;
// 直接打印它所指向的值
printf("%s", str);
return 0;
}
而运行以上代码"我们可以发现没有任何输出"我们可以考虑其实printf是有对NULL指针做处理的"但是如果你指向未知的地址"就不会有任何提示输出"出现错误。
转载:感谢您阅览,转载请注明文章出处“来源从小爱孤峰知识网:一个分享知识和生活随笔记录的知识小站”。
链接:C语言tips-NULL指针和void指针http://www.gufeng7.com/niaolang/377.html
联系:如果侵犯了你的权益请来信告知我们删除。邮箱:119882116@qq.com
上一篇: 数组和指针绝不等价,数组是另外一种类型
下一篇: C语言二级指针(指向指针的指针)详解