函数的参数是一个一级指针,可以传递内存吗?

如果函数的参数是一个一级指针,不要指望用该指针去申请动态内存。

看下面的实例:

#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++| 函数的指针参数如何传递内存?相关推荐

  1. 指针的引用做函数的参数

    #include <iostream>using namespace std; // 二级指针的使用 [11/24/2017 Andrew]struct Teacher {char nam ...

  2. c++之指针和引用作为函数参数传递时的区别

    之前写过c++之值传递.引用传递.指针传递,今天再单独区分一下指针和引用作为函数参数传递时的区别. 本文参考浅谈C++中指针和引用的区别 一.指针作为函数参数传递时 1.类似于值传递,传入函数的指针只 ...

  3. C++指针参数如何传递内存?

    C++指针参数如何传递内存? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存.示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依 ...

  4. c6011取消对null指针的引用_C++中的野指针及其规避方法

    今天在调试程序过程中,用到了一些指针的方法,这里记录一下野指针的概念. 1.概念 野指针,也就是指向不可用内存区域的指针.通常对这种指针进行操作的话,将会使程序发生不可预知的错误. 野指针与空指针(N ...

  5. c6011取消对null指针的引用_C/C++学习笔记——C提高:指针强化

    指针是一种数据类型 指针变量 指针是一种数据类型,占用内存空间,用来保存内存地址. void test01(){ int* p1 = 0x1234; int*** p2 = 0x1111; print ...

  6. c6011取消对null指针的引用_COM编程攻略(二十二 IDL中的枚举,指针,数组)

    上一篇: Froser:COM编程攻略(二十一 异步)​zhuanlan.zhihu.com 本篇主要讲idl的一些语法特性. idl的语法和C语言非常类似,但是它扩展了一些特性,这些特性用于兼容其它 ...

  7. 指针 是否相同_c专题之指针---野指针和空指针解析

    ----在上一篇c专题指针文章中,我们介绍了什么是指针,文章里面从普通变量进而引出指针的概念,这样对指针的理解有一定的帮助(其实最好的理解,就是要明白硬件里面的内存原理,这是理解指针最好的地方,就好比 ...

  8. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  9. C++ 学习之旅(8)——一文搞懂指针、引用、函数参数的传值调用、指针调用和引用调用

    废话少说,直接上代码: #include <iostream>int main() {int a = 5;int* ptr = &a;int& ref = a;std::c ...

最新文章

  1. Java Web中的Filter和Interceptor的区别
  2. java反编器中文版,java反编译软件下载
  3. 复习笔记——操作系统
  4. Oracle分页查询语句
  5. JavaScript 中的代码小技巧
  6. mysql gtid 主主_mysql GTID主从复制(主库在线,添加新丛库)
  7. 大专学历造假改成了211, 拿到了抖音Offer
  8. P2057 [SHOI2007]善意的投票 最小割
  9. 数据结构笔记--线性表定义与实现(Swift)
  10. 数据库基本知识点总结
  11. 节约里程法java代码,智慧职教: 在配送路线优化的节约里程法中有几个基本的假设前提条件,他们是()。...
  12. 基于LED的室内可见光通信系统
  13. SpringCloud Netflix—微服务架构
  14. 2018全国大学生电子竞赛D题代码和心得
  15. 小米三季报:手机不振,汽车加码
  16. Android 手势小试牛刀
  17. ko 绑定html,WeX5的正确打开方式(3)——绑定机制
  18. 电大计算机试题及答案形成性,国开电大机械CAD/CAM形成性作业1答案
  19. linux各种配置笔记
  20. 美国二手车电商CarMax持续盈利的背后 国内二手车平台该学习什么?

热门文章

  1. Image Processing Wavefronts for HEVC Parallelism
  2. windows平台下vlc编译
  3. H264基本概念之 宏块、片和片组
  4. Docker 安装 Redis (Redis 配置)
  5. Docker 下载 JDK 镜像(docker search 、docker pull)
  6. 解决: Client does not support authentication protocol requested by server; consider upgrading MySQL
  7. IOS —— 网络那些事(上) - http协议
  8. ajax传递数组:属性traditional设置
  9. JMeter响应断言详解
  10. 【Daily Scrum】12-08