ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C语言 指针用法与区别(指针常量、常量指针、指针函数、函数指针、二级指针)

C语言 指针用法与区别(指针常量、常量指针、指针函数、函数指针、二级指针) 前言指针是C/C编程的一个核心概念很多编程初学者可能对此感到似懂非懂力不从心合理使用指针能够显著提升程序性能本文将对各类指针做一些解读帮助大家更好理解与运用。这里我们所讲的是“裸”指针非智能指针。目录一、什么是指针二、指针常量与常量指针2.1 指针常量2.2 常量指针2.3 记忆技巧2.4 代码示例三、指针函数与函数指针3.1 指针函数3.2 函数指针四、二级指针一、什么是指针简单来说指针就是地址。举个简单的例子int a 10; int *p a;//p就是变量a的地址我们上述代码进行图解可以清晰地看到指针p实际上就是变量a的地址。二、指针常量与常量指针2.1 指针常量顾名思义指针是常量限制的是指针本身指针无法修改指向但指向的地址里的内容可变int* const p2.2 常量指针常量指针指针指向的地址里的内容是常量不可修改但指针指向可变指针可指向其他地址//写法1 int const* p //写法2 const int* p2.3 记忆技巧看const直接紧跟的是谁谁就不可修改。int* const p 这里const紧跟p也就是指针本身是常量即指针常量。const int* p这里const紧跟*p也就是指向的地址里的内容是常量即常量指针。2.4 代码示例#include iostream using namespace std; int main() { int a 10; int b 20; // 常量指针指向的内容不能改指针本身可以改 const int* p1 a; // 错误不能通过p1修改a的值*p1是常量 // *p1 100; // 正确指针p1本身可以指向其他地址 p1 b; cout *p1 endl; // 输出 20 //指针常量指针本身是常量不可修改指向指向内容可修改 int* const p2 a; //正确可通过p2修改a的值 *p2 100; //错误指针p2本身是常量不可修改指向 //p2 b; cout *p2 endl; //输出 100 return 0; }三、指针函数与函数指针3.1 指针函数指针函数本质是一个函数函数的返回值是指针类型语法格式返回值类型* 函数名(参数列表)代码示例// 指针函数返回int类型指针的函数 int* get_num_ptr() { static int num 100; // 用static避免局部变量销毁导致野指针 return num; // 返回变量num的地址指针 }上述代码中注意野指针的问题野指针指针指向的内容已被释放但指针没有赋值为Null3.2 函数指针函数指针本质是一个指针指向了函数的入口的地址语法格式返回值类型 (*指针名)(参数列表)代码示例#include stdio.h // 普通函数乘法 int mul(int a, int b) { return a * b; } int main() { // 定义函数指针指向“返回int、接收两个int参数”的函数 int (*fp)(int, int); fp mul; // 函数指针指向mul函数 printf(函数指针调用乘法%d\n, fp(4, 5)); // 输出20 return 0; }四、二级指针C语言中存在二级指针的概念即指针的地址。一级指针int *p二级指针int **p简单C代码例子int a 10; int *p a; //p就是变量a的地址 p是一级指针 int **p2 p; //p2是一级指针p的地址p2是二级指针在第一节的例子的基础上我们继续对二级指针进行图解可与第一节中的图进行对比写在后面C/C中的指针是编程的核心知识使用恰当可提升代码性能但若使用不当很容易导致程序出现不可预测的行为需格外小心。C中指针的进阶 智能指针可有效避免编程失误导致的一些内存问题感兴趣的读者可参考本人之前的文章C智能指针 解读_c 智能指针详解-CSDN博客​​
返回列表