重庆网站优化排名推广,seo怎么做,廊坊网站建设案例,南昌关键词优化平台目录
1. 野指针产生原因和解决方法
1.1 产生的原因
1.1.1 指针未能初始化
1.1.2 指针指向的内存被释放
1.1.3 指针指向的对象被重复释放
1.2 解决方法
1.2.1 初始化指针
1.2.2 指针空置
1.2.3 避免悬挂指针
2. 指针函数和函数指针的区别
2.1 定义不同
2… 目录
1. 野指针产生原因和解决方法
1.1 产生的原因
1.1.1 指针未能初始化
1.1.2 指针指向的内存被释放
1.1.3 指针指向的对象被重复释放
1.2 解决方法
1.2.1 初始化指针
1.2.2 指针空置
1.2.3 避免悬挂指针
2. 指针函数和函数指针的区别
2.1 定义不同
2.2 写法不同 2.3 用法不同
2.3.1 指针函数
2.3.2 函数指针 1. 野指针产生原因和解决方法 在代码编写的过程中可能会出现指针指向的位置未知从而出现程序错误这种指针统一称作野指针。野指针出现的原因最常见的如下几种
1.1 产生的原因
1.1.1 指针未能初始化 如果一个指针变量被声明但没有被初始化它会包含一个随机的地址这个地址很可能不指向有效的内存区域。当你尝试访问这个指针所指向的内存时就会发生未定义行为或者访问非法内存
#include stdio.hint main()
{int* p; // 未初始化的指针*p 20;// 这里会导致未定义行为因为p并没有指向有效的内存return 0;
}
1.1.2 指针指向的内存被释放 当一个指针指向的内存区域被显式释放使用 free 函数或者类似的机制或者超出了其作用域例如局部变量的指针超出了函数的范围该指针就成为了野指针。尝试使用或者间接访问这样的指针会导致未定义行为。
int *ptr;
{int localVar 10;ptr localVar;
} // localVar 超出作用域ptr 现在是一个野指针// 尝试访问 *ptr 将导致未定义行为1.1.3 指针指向的对象被重复释放 如果一个指针指向的内存已经被释放但指针本身仍然保持指向已释放的内存这也会导致野指针的问题。再次使用这个指针可能会导致不可预测的行为或程序崩溃。
int *ptr malloc(sizeof(int));
free(ptr);
// 现在 ptr 是一个野指针指向已释放的内存区域1.2 解决方法
1.2.1 初始化指针 确保每一个指针在使用前都被正确地初始化。
1.2.2 指针空置 当指针不再需要时将其设置为 NULL 或者 nullptr对于 C。
1.2.3 避免悬挂指针 在超出作用域之前确保指针不再指向该作用域内的局部变量。
int *ptr NULL; // 初始化为 NULL// 使用前检查指针是否为 NULL
if (ptr ! NULL) {// 只有在 ptr 不为 NULL 时才使用它
}2. 指针函数和函数指针的区别
2.1 定义不同
指针函数本质是一个函数其返回值为指针。 函数指针本质是一个指针其指向一个函数。
2.2 写法不同 指针函数的*是属于数据类型的而函数指针的星号是属于函数名的
指针函数int* fun(int x,int y);
函数指针int (*fun)(int x,int y); 简单点理解就是函数名带括号的就是函数指针否则就是指针函数。 2.3 用法不同
2.3.1 指针函数 指针函数是一个返回指针的函数。它本质上是一个函数其返回类型是指针类型。这意味着该函数返回一个指针指向指定类型的数据。指针函数的声明形式为 *类型标识符 函数名(参数表) 举个例子首先声明一个普通的函数
int fun(int x,int y);我们在声明一个函数如
int *fun(int x,int y);这和上面那个函数唯一的区别就是在函数名前面多了一个*号而这个函数就是一个指针函数。其返回值是一个 int 类型的指针是一个地址。因此想要得到输出值需要加上解引用运算符*例如
#includestdio.h// 定义一个指针函数返回一个整型指针
int* findMax(int arr[], int size) {if (size 0) return NULL;int* max arr[0];for (int i 1; i size; i) {if (arr[i] *max) {max arr[i];}}return max;
}int main() {int numbers[] { 1, 3, 7, 2, 5 };int* maxPtr;maxPtr findMax(numbers, 5); // 调用指针函数printf(Max: %d\n, *maxPtr); // 输出最大值printf(Max: %p\n, maxPtr);return 0;
}本函数是一个求数组最大值的函数若是直接出则会输出地址因此需要进行解引用 普通函数则可进行直接输出
#include stdio.h// 定义一个普通函数返回整型值最大值
int findMax(int arr[], int size) {if (size 0)return 0; // 如果数组为空返回一个适当的默认值这里返回0作为示例int max arr[0];for (int i 1; i size; i) {if (arr[i] max) {max arr[i];}}return max;
}int main() {int numbers[] { 1, 3, 7, 2, 5 };int max findMax(numbers, 5); // 调用普通函数找到最大值printf(Max: %d\n, max); // 输出最大值return 0;
}2.3.2 函数指针 函数指针是指向函数的指针变量。函数指针存储了函数的地址可以用来调用该函数。它的声明形式为
int (*fun)(int x,int y);函数指针是需要把一个函数的地址赋值给它有两种写法
fun Function
fun Function;取地址运算符不是必需的因为一个函数标识符就表示了它的地址如果是函数调用还必须包含一个圆括号括起来的参数表。 调用函数指针的方式也有两种
x (*fun)();
x fun();我们进行一个简单的运用
#includestdio.h//函数
int add(int x, int y)
{return x y;
}//函数指针
int (*fun)(int x, int y);int main()
{int result;// 将函数指针 fun 分别指向 add 和 sub 函数fun add;result fun(10, 5); // 调用 add 函数printf(Result of add: %d\n, result);fun add;result fun(10, 5); // 调用 add 函数printf(Result of add: %d\n, result);fun add;result (*fun)(10, 5); // 调用 add 函数printf(Result of add: %d\n, result);fun add;result (*fun)(10, 5); // 调用 add 函数printf(Result of add: %d\n, result);return 0;
}千题千解·嵌入式工程师八股文详解_时光の尘的博客-CSDN博客 文章转载自: http://www.morning.wnhgb.cn.gov.cn.wnhgb.cn http://www.morning.pggkr.cn.gov.cn.pggkr.cn http://www.morning.kjyqr.cn.gov.cn.kjyqr.cn http://www.morning.lhrcr.cn.gov.cn.lhrcr.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.yrxcn.cn.gov.cn.yrxcn.cn http://www.morning.wqpb.cn.gov.cn.wqpb.cn http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn http://www.morning.bbjw.cn.gov.cn.bbjw.cn http://www.morning.qpsft.cn.gov.cn.qpsft.cn http://www.morning.ljdtn.cn.gov.cn.ljdtn.cn http://www.morning.qjlnh.cn.gov.cn.qjlnh.cn http://www.morning.rnxw.cn.gov.cn.rnxw.cn http://www.morning.dansj.com.gov.cn.dansj.com http://www.morning.gfrjs.cn.gov.cn.gfrjs.cn http://www.morning.zlxkp.cn.gov.cn.zlxkp.cn http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn http://www.morning.fbmzm.cn.gov.cn.fbmzm.cn http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn http://www.morning.lskrg.cn.gov.cn.lskrg.cn http://www.morning.lqzhj.cn.gov.cn.lqzhj.cn http://www.morning.tdgwg.cn.gov.cn.tdgwg.cn http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn http://www.morning.xmjzn.cn.gov.cn.xmjzn.cn http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn http://www.morning.mgwpy.cn.gov.cn.mgwpy.cn http://www.morning.nyqxy.cn.gov.cn.nyqxy.cn http://www.morning.ymfzd.cn.gov.cn.ymfzd.cn http://www.morning.routalr.cn.gov.cn.routalr.cn http://www.morning.rqbkc.cn.gov.cn.rqbkc.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.yzxlkj.com.gov.cn.yzxlkj.com http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.zryf.cn.gov.cn.zryf.cn http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn http://www.morning.qzdxy.cn.gov.cn.qzdxy.cn http://www.morning.mtgnd.cn.gov.cn.mtgnd.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.xkqjw.cn.gov.cn.xkqjw.cn http://www.morning.wckrl.cn.gov.cn.wckrl.cn http://www.morning.xnyfn.cn.gov.cn.xnyfn.cn http://www.morning.skrrq.cn.gov.cn.skrrq.cn http://www.morning.nqypf.cn.gov.cn.nqypf.cn http://www.morning.rxhsm.cn.gov.cn.rxhsm.cn http://www.morning.fqsxf.cn.gov.cn.fqsxf.cn http://www.morning.cwfkm.cn.gov.cn.cwfkm.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.ydhck.cn.gov.cn.ydhck.cn http://www.morning.hwtb.cn.gov.cn.hwtb.cn http://www.morning.fylsz.cn.gov.cn.fylsz.cn http://www.morning.bpmdn.cn.gov.cn.bpmdn.cn http://www.morning.zlhzd.cn.gov.cn.zlhzd.cn http://www.morning.weiwt.com.gov.cn.weiwt.com http://www.morning.cwqrj.cn.gov.cn.cwqrj.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn http://www.morning.wynnb.cn.gov.cn.wynnb.cn http://www.morning.bmqls.cn.gov.cn.bmqls.cn http://www.morning.xdxpq.cn.gov.cn.xdxpq.cn http://www.morning.qysnd.cn.gov.cn.qysnd.cn http://www.morning.wgtr.cn.gov.cn.wgtr.cn http://www.morning.mrkbz.cn.gov.cn.mrkbz.cn http://www.morning.dndjx.cn.gov.cn.dndjx.cn http://www.morning.ryglh.cn.gov.cn.ryglh.cn http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn http://www.morning.wpspf.cn.gov.cn.wpspf.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.ttfh.cn.gov.cn.ttfh.cn http://www.morning.qwyms.cn.gov.cn.qwyms.cn http://www.morning.mcwrg.cn.gov.cn.mcwrg.cn http://www.morning.tmfhx.cn.gov.cn.tmfhx.cn http://www.morning.lywys.cn.gov.cn.lywys.cn http://www.morning.wschl.cn.gov.cn.wschl.cn http://www.morning.nykzl.cn.gov.cn.nykzl.cn http://www.morning.ubpsa.cn.gov.cn.ubpsa.cn http://www.morning.kqnwy.cn.gov.cn.kqnwy.cn http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn