C++分析以下关于指针的操作有什么问题

news/2024/11/17 22:44:19/

代码一:按值传递/按引用传递

按值传递是指,在函数调用时,将参数的值复制一份传递给函数,函数中对参数值的修改不会影响到原始值

对于指针类型的参数,在按值传递的情况下,传递给函数的是指针变量的值(即指针变量所存储的地址),而不是指针所指向的内存地址。因此,当在函数中对指针变量赋值时,只是修改了指针变量的值,而不是指针所指向的内存地址。

void GetMemory1(char* p) {
    p = (char*) malloc(100);
}
char* str = NULL;
GetMemory1(str);

p 指向的是一个新分配的内存块,但是这个操作不会影响到原始指针 str,因为传递给函数的是指针 str 的副本,即指针变量的值,而不是指针所指向的内存地址

修改方案1:采用引用作为函数参数

void GetMemory1(char*& p) {
    p = (char*) malloc(100);
}

修改方案2:指向指针的指针

void GetMemory2(char** p) {
    *p、p = (char*) malloc(100);

代码二:作用域/内存释放

char *GetMemory2(void){char p[] = "hello world";return p;
}
void Test2(void){char *s

http://www.ppmy.cn/news/35152.html

相关文章

一文看懂数据仓库

数据仓库数据仓库的概念数据仓库的主要特征数据仓库的分层数据仓库的分层介绍原始数据层:ODS(Operational Data Store)数据仓库层:DW(Data Warehouse)数据明细层:DWD(Data Warehouse…

进阶C语言——字符函数和字符串函数【详解】(二)

文章目录1. strtok2. strerror3. memcpy4. memmove5. memcmp6. memset1. strtok sep参数是个字符串,定义了用作分隔符的字符集合第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记strtok函数找到str中的下一个标记…

算法训练:贪心与回溯

目录 1.手套(贪心算法) 2.字符串通配符(回溯算法) 1.手套 题目描述: 在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以…

【redis】redis缓存更新策略

目录一、缓存更新策略二、主动更新策略三、Cache Aside Pattern3.1 删除缓存还是更新缓存?3.2 如何保证缓存与数据库的操作同时成功或失败?3.3 先操作缓存还是先操作数据库3.3.1 先删缓存再删库3.3.2 先删库再删缓存一、缓存更新策略 1.内存淘汰:不用自…

Flutter-Scaffold组件

在Flutter开发当中,我们可能会遇到以下的需求:实现页面组合使用,比如说有悬浮按钮、顶部菜单栏、左右抽屉侧边栏、底部导航栏等等效果。Scaffold组件可以帮我们实现上面需求说的效果。这篇博客主要分享容器组件的Scaffold组件的使用&#xff…

【数据结构篇C++实现】- 堆

文章目录🚀一、堆的原理精讲⛳(一)堆的概念⛳(二)看图识最大堆⛳(三)详解堆是用数组表示的树🚀二、堆的向下调整算法🚀三、堆的向上调整算法🚀四、将任意一棵…

古茗科技面试:为什么 ElasticSearch 更适合复杂条件搜索?

文章目录 ElasticSearch 简介倒排索引联合索引查询跳表合并策略Bitset 合并策略MySQL 最多使用一个条件涉及的索引来过滤,然后剩余的条件只能在遍历行过程中进行内存过滤。 上述这种处理复杂条件查询的方式因为只能通过一个索引进行过滤,所以需要进行大量的 I/O 操作来读取行…

STM32-9 STM32CubeMX的使用方法

一、 说明 本项目是基于FreeRTOS项目的STM32CubeMX开发方式,说明了具体配置与相关参数,以及mdk使用,裸机也可以参考本配置。 二、项目建立步骤 1、新建项目 2、选择芯片型号 3、配置时钟 RCC 设置,选择 HSE(外部高速时钟) 和L…