c6011取消对null指针的引用_C++| 函数的指针参数如何传递内存?
函数的参数是一个一级指针,可以传递内存吗?
如果函数的参数是一个一级指针,不要指望用该指针去申请动态内存。
看下面的实例:
#include
using namespace std;
void GetMemory(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);//指针解引用操作才是更新其指向
// 这里没有解引用,直接操作的是指针本身,而不是指针指向
cout<
}
void main()
{
char *str = NULL;
GetMemory(str, 100);// str 仍然为 NULL
if(str==NULL)
{
cout<
}
else
{
strcpy(str, "hello");
cout<
}
cout<
system("pause");
}
/*
0012FEF0
str是空指针!
0012FF44
*/
在函数中,当用指针做参数时,需要解引用操作才是更新指针指向的值,如果不用有解引用操作,相当于就是对指针本身的操作,与指针的指向的内容没有关系。
怎么样才可以使用指针参数来传递内存呢?
首先要明白以下两个问题:
I 动态申请内存是返回一个地址,用指针可以保存这个地址。II 实参必须是一个指针,如char* str,要操作这个指针本身的地址&str,可以用一个二级指针来作为左值为接收这&str,如char** p = &str,这样用*p与str同一。
所以如果要用函数的指针参数来传递内存,这个指针参数必须是一个二级指针:
#include using namespace std;void GetMemory(char **p, int num){*p = (char *)malloc(sizeof(char) * num);//*p是**P指向的值(指针)cout<
-End-
c6011取消对null指针的引用_C++| 函数的指针参数如何传递内存?相关推荐
- 指针的引用做函数的参数
#include <iostream>using namespace std; // 二级指针的使用 [11/24/2017 Andrew]struct Teacher {char nam ...
- c++之指针和引用作为函数参数传递时的区别
之前写过c++之值传递.引用传递.指针传递,今天再单独区分一下指针和引用作为函数参数传递时的区别. 本文参考浅谈C++中指针和引用的区别 一.指针作为函数参数传递时 1.类似于值传递,传入函数的指针只 ...
- C++指针参数如何传递内存?
C++指针参数如何传递内存? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存.示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依 ...
- c6011取消对null指针的引用_C++中的野指针及其规避方法
今天在调试程序过程中,用到了一些指针的方法,这里记录一下野指针的概念. 1.概念 野指针,也就是指向不可用内存区域的指针.通常对这种指针进行操作的话,将会使程序发生不可预知的错误. 野指针与空指针(N ...
- c6011取消对null指针的引用_C/C++学习笔记——C提高:指针强化
指针是一种数据类型 指针变量 指针是一种数据类型,占用内存空间,用来保存内存地址. void test01(){ int* p1 = 0x1234; int*** p2 = 0x1111; print ...
- c6011取消对null指针的引用_COM编程攻略(二十二 IDL中的枚举,指针,数组)
上一篇: Froser:COM编程攻略(二十一 异步)zhuanlan.zhihu.com 本篇主要讲idl的一些语法特性. idl的语法和C语言非常类似,但是它扩展了一些特性,这些特性用于兼容其它 ...
- 指针 是否相同_c专题之指针---野指针和空指针解析
----在上一篇c专题指针文章中,我们介绍了什么是指针,文章里面从普通变量进而引出指针的概念,这样对指针的理解有一定的帮助(其实最好的理解,就是要明白硬件里面的内存原理,这是理解指针最好的地方,就好比 ...
- C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)
每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...
- C++ 学习之旅(8)——一文搞懂指针、引用、函数参数的传值调用、指针调用和引用调用
废话少说,直接上代码: #include <iostream>int main() {int a = 5;int* ptr = &a;int& ref = a;std::c ...
最新文章
- Java Web中的Filter和Interceptor的区别
- java反编器中文版,java反编译软件下载
- 复习笔记——操作系统
- Oracle分页查询语句
- JavaScript 中的代码小技巧
- mysql gtid 主主_mysql GTID主从复制(主库在线,添加新丛库)
- 大专学历造假改成了211, 拿到了抖音Offer
- P2057 [SHOI2007]善意的投票 最小割
- 数据结构笔记--线性表定义与实现(Swift)
- 数据库基本知识点总结
- 节约里程法java代码,智慧职教: 在配送路线优化的节约里程法中有几个基本的假设前提条件,他们是()。...
- 基于LED的室内可见光通信系统
- SpringCloud Netflix—微服务架构
- 2018全国大学生电子竞赛D题代码和心得
- 小米三季报:手机不振,汽车加码
- Android 手势小试牛刀
- ko 绑定html,WeX5的正确打开方式(3)——绑定机制
- 电大计算机试题及答案形成性,国开电大机械CAD/CAM形成性作业1答案
- linux各种配置笔记
- 美国二手车电商CarMax持续盈利的背后 国内二手车平台该学习什么?
热门文章
- Image Processing Wavefronts for HEVC Parallelism
- windows平台下vlc编译
- H264基本概念之 宏块、片和片组
- Docker 安装 Redis (Redis 配置)
- Docker 下载 JDK 镜像(docker search 、docker pull)
- 解决: Client does not support authentication protocol requested by server; consider upgrading MySQL
- IOS —— 网络那些事(上) - http协议
- ajax传递数组:属性traditional设置
- JMeter响应断言详解
- 【Daily Scrum】12-08