首页 > 其他分享 >指针变量一定要先赋值再使用

指针变量一定要先赋值再使用

时间:2024-03-23 10:01:56浏览次数:27  
标签:AA typedef 变量 int a1 pc 赋值 指针

链接: 小小记录本

指针变量使用

指针变量为NULL时,不能访问该地址,这些我都清楚,但是我还是经常在这里犯错,普通的指针基本没什么问题,但是涉及到隐晦一点的使用,就会马虎忘记。比如使用结构体指针的时候就常常犯错。

下面这段代码有什么问题,你能发现吗?

typedef struct AA
{
	int data;
	int size;
}AA;

int main()
{
	AA* a1;
	a1->data = 10;
	return 0;
}

这段代码就是典型的使用空地址,我们在创建了结构体指针a1后,并没有为其赋值,然后就直接访问a1->data此时就是使用了空指针去访问,自然会出错。

在创建指针之后,为它申请一个结构体空间的地址,再使用就不会有问题

typedef struct AA
{
	int data;
	int size;
}AA;
int main()
{
	AA* a1;
	a1 = (AA*)malloc(sizeof(AA));
	a1->data = 10;
	return 0;
}

这样问题就迎刃而解了,不过我还经常在更复杂的场景下犯错,比如结构体指针作为函数实参,嵌套结构体指针的情况下,还是会经常忘记为结构体变指针初值。

下面的代码就是指针嵌套指针的情况,这种时候必须为每一个指针变量赋予初值才可以使用,少了任何一个都会报错。

typedef struct A
{
	int a;
}A;

typedef struct B
{
	A* pa;
}B;

typedef struct C
{
	B* pb;
}C;

int main()
{
	C* pc;
	pc = (C*)malloc(sizeof(C));
	pc->pb = (B*)malloc(sizeof(B));
	pc->pb->pa = (A*)malloc(sizeof(A));
	pc->pb->pa->a = 10;
	printf("%d\n", pc->pb->pa->a);
	return 0;
}

总结

  1. 指针变量一定要赋予初值然后再使用
  2. 嵌套指针的时候,记得给每个指针都赋予初值,容易忘记
  3. 使用多层指针遇到访问空地址的问题首先检查指针是不是空值

标签:AA,typedef,变量,int,a1,pc,赋值,指针
From: https://blog.csdn.net/weixin_69356744/article/details/136960912

相关文章

  • 8.Golang中的运算符-算术运算符、关系运算符、逻辑运算符、赋值运算符
    Golang中的运算符1、Golang内置的运算符算术运算符关系运算符逻辑运算符位运算符赋值运算符2、算数运算符运算符描述+相加-相减*相乘/相除%求余=被除数-(被除数/除数)*除数注意:++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。pa......
  • C++ 指针,指针引用,二级指针作为实参传入函数体,形参改变指向的问题
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、形参指向变化,实参指向不变二、指针引用传递改变实参指向三、二级指针**传递改变实参指向一、形参指向变化,实参指向不变前提了解:无论是值传递,指针传递,引用传递,形参和实参都是完全不同的......
  • C与指针1.0
    //更新中,本星期结束前,会加上一些指针习题+总结出思维导图//用途:分享,仅供参考,自己复习一.指针与地址1.指针简介定义:指针是用来访问内存的,相当于房间的房间号便于查询,提高效率内存单元的编号==地址==指针大小:4/8个字节,只要是指针变量就是,和类型无关x86(32位机器,32根总线......
  • 【C++ leetcode】双指针问题
    1.  611.有效三角形的个数题目给定一个包含非负整数的数组nums,返回其中可以组成三角形三条边的三元组个数。题目链接.-力扣(LeetCode)画图和文字分析判断是否是三角形要得到三边,由于遍历三边要套三层循环,时间复杂度很大,所以这里我们需要借助双指针思想,可......
  • QT 智能指针 QPointer QScopedPointer QSharedPointer QWeakPointer QSharedDataPoint
    QPointerQPointer是一种受保护的指针,当其引用的对象被销毁时,它会被自动清除(但是,销毁引用对象还是必须手动delete)。QPointer所指向的对象必须是QObject或其派生类对象。当多个指针指向同一个Object对象时,引用的对象可能被释放掉,这时使用QPointer就可以安全的测试引用对象是......
  • #include<初见C语言之指针(3)>
    目录一、字符指针变量二、数组指针变量1.什么是数组指针变量?2.数组指针怎么初始化?三、二组数组传参的本质四、函数指针变量1.什么是函数指针变量?2.函数指针变量使用  3.有趣代码 3.1typedef关键字五、函数指针数组六、转移表总结一、字符指针变量字符指针......
  • Kotlin 空指针检查
    目录引言正文空指针检查机制可为空的类型系统判空辅助工具 ?.操作符 ?:操作符非空断言工具 !!操作符与众不同的辅助工具—let引言        某国外机构做过一个统计,Android系统上崩溃率最高的异常类型就是空指针异常(NullPointerException),空指针是一种不......
  • dxGaugeControl指针仪表盘
    界面放上dxGaugeControl控件,点右键添加比例->圆选择一个自己喜欢的样子,我这只是为了要指针 打开视图选项AngleStart和AngleEnd主要是调整0-100位置的MinValue,MaxValue是刻度最大、最小值MinorTickCount设置次刻度数量ShowBackground是否显示背景图片SetShowFirstTick、......
  • C++开发基础——智能指针
    一,智能指针1.智能指针简介智能指针是用法和行为类似于指针的类对象。智能指针的底层对原始指针做了一定的封装。智能指针除了像指针一样可以存储变量的地址,还提供了其他功能,比如可以管理动态内存分配,对引用进行计数等。当智能指针所指向的变量离开了作用域或被重置时,智能......
  • Optional避免空指针
    1/**2*<h1>学会Optional,规避空指针异常</h1>3**/4@SuppressWarnings("all")5publicclassOptionalUsage{67privatestaticvoidbadUsageOptional(){89Optional<User>optional=Optional.ofNullable(nu......