C语言中的指针到底是什么 指针的基本概念是什么
好了,咱们先来聊聊C语言里的指针究竟是啥。其实,指针就是存放“变量地址”的变量,它不像普通变量直接存值,而是保存那个变量在内存里的位置。通俗地说,就是指针告诉程序“嘿,这个数据在这儿!”
举个简单例子:
int a1 = 10;
int *pa = &a1;
这里,a1 是整型变量,等于10;然后pa是个整型指针,存的就是变量a1的地址。看到没,这样我们就能通过指针直接操作a1的值啦,超方便对吧!
顺便提下,还有个叫*p的东西,是用来“解引用”的,也就是通过指针取到那个内存地址里的值;而p本身是指针变量,储存的是地址。两个虽然长得像,但可不是一个意思呢!

什么叫野指针 野指针是怎么回事
说到野指针,这可得小心了,因为它就是你最不想遇到的“指针险境”!野指针简单来说,就是“空悬的指针”,没初始化或者指向无效内存的指针。它一旦被用起来,嘿,后果可能惨不忍睹,程序崩溃或者莫名其妙的bug都跑出来了。
为什么会有野指针呢?
1. 定义指针后没有马上赋值,结果指向垃圾地址。
2. 指针指向的内存被释放了,却还调它。
举个例子,你声明了指针int *p;,但没给它赋地址,直接用*p去访问,结果就是野指针。你想,程序完全不知道p指向哪儿,危险吧?
所以,小技巧就是指针变量一定记得初始化,要么设为NULL,要么指向一个确定的地址,避免野指针搞得头大!

相关问题解答
-
C语言指针和普通变量有什么区别吗?
嘿,这问得好!指针不是存数据的普通变量,它是存地址的!也就是说,指针告诉你数据存哪里,你还得用“解引用”操作*,才能读写那个地址上的值。用指针操作,效率高,说白了它就是操作内存的利器! -
指针里的
*p和p+2有什么区别啊?
这两个傻傻分不清是挺常见的错误~~~简单说:*p+2是先取p指向的值,再加2;而p+2是把指针往内存后面偏移两个位置,不涉及数值计算。举个栗子,假设p指向数组第一个元素1,*p+2结果是3,但*(p+2)才是数组中第三个元素值,别弄混咯! -
用指针操作结构体成员,该怎么写?
哎呀,结构体指针该用->操作符,像这样:ptr->成员名。这个表达就是告诉编译器“我有个指针,快去访问它指向的结构体的那个成员”。比你先写(*ptr).成员简洁多了,还减少了括号烦扰,棒棒哒! -
为什么避免不了野指针问题?
哈哈,这绝对是老司机都头疼的坑!主要是因为C语言给了你那么强大的内存操作权利,但也不帮你检查安全,所以一不小心就用到了还没初始化或已经无效的指针。只有自己格外小心,初始化,及时把不用的指针置NULL,还有躲开悬空指针,才能稳稳当当写程序。
新增评论