云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > C++对象模型[2]指针与引用

C++对象模型[2]指针与引用

  • 62 次阅读
  • 3 次下载
  • 2025/12/13 11:53:51

[C++对象模型][2]指针与引用 一 概括

指针和引用,在C++的软件开发中非常常见,如果能恰当的使用它们能够极大的提高整个软件的效率,但是很多的C++学习者对它们的各种使用情况并不是都了解,这就导致了实际的软件开发中经常会内存泄漏,异常抛出,程序崩溃等问题。对于C和C++的初学者,那更是被它们搞的迷迷糊糊。本篇作为[深入C++]系列的第一节,我们就带领大家把指针和引用这个基本功练好。 二 指针

指针,指针的定义是什么呢?好像要想给个直接的定义还是很难的哦,所以我们这里用它的语法结合图来认识它。 int i = 10; int *p = NULL; p = &i;

int j = *p;

int **pP = NULL; pP = &p;

在上面的几条语句中,&用来定义引用变量或对变量取其地址,*用来定义指针或得到指针所指向的变量,其中p为定义的指针变量,它指向int变量i,而pP为二级指针变量,它指向指针变量p。相应的示意图如下:

C++是对C的扩展,我们首先来看指针在C中的使用,下面的经典实例来自林锐的《高质量编程》,记住函数的默认参数传递方式为按值传递,即实参被传入函数内时进行了拷贝,函数内其实是对拷贝对象的操作,还有当函数使用return返回变量时,其实返回的是原对象的一个拷贝,此时的实参和原对象有可能是一般变量也有可能是指针变量。

Code

#pragma once

#include #include #include

// ----------------------------------------------- void GetMemory1(char *p, int num) {

p = (char*)malloc(num); }

void Test1(void) {

char *str = NULL; GetMemory1(str, 100);

strcpy(str, \ printf(str); }

// ----------------------------------------------- void GetMemory2(char **p, int num) {

*p = (char*)malloc(num); }

void Test2(void) {

char * str = NULL; GetMemory2(&str, 100);

strcpy(str, \ printf(str); free(str); }

// ----------------------------------------------- char* GetMemory3(void) {

char p[] =\ return p; }

void Test3(void) {

char* str = NULL; str = GetMemory3(); printf(str); }

// ----------------------------------------------- char* GetMemory4(void) {

char *p = \ return p; }

void Test4() {

char* str = NULL; str = GetMemory4(); printf(str); }

// ----------------------------------------------- char* GetMemory5(void) {

char *p = (char*)malloc(100); strcpy(p,\ return p; }

void Test5() {

char* str = NULL; str = GetMemory5(); printf(str); free(str); }

// ----------------------------------------------- void Test6( void ) {

char * str = (char*)malloc(100); strcpy(str, \ free(str);

if (str != NULL) {

strcpy(str, \ printf(str); } }

// ----------------------------------------------- void TestPointerAndReference() {

// -----------------------------------------------

// 请问运行Test1函数会有什么样的结果? //

// 答:程序崩溃。同时有内存泄漏。 //

// 因为在GetMemory1函数的调用过程中,其实是对实参指针p做了拷贝,拷贝为局部变量,

// 在函数内的操作是对局部变量的操作,局部变量与实参是两个不同的变量,相互不影响。 //

// 所以,当GetMemory1调用结束时,Test1函数中的 str一直都是 NULL。 // strcpy(str, \将使程序崩溃。 //

//Test1();

// ----------------------------------------------- // 请问运行Test2函数会有什么样的结果? //

// 答:(1)能够输出hello world; (2)但是调用结束要对内存释放,否则内存泄漏; //

Test2();

// ----------------------------------------------- // 请问运行Test3函数会有什么样的结果? //

// 答:可能是乱码。 //

// 因为GetMemory3返回的是指向“栈内存”的指针,

// 该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。 //

Test3();

// ----------------------------------------------- // 请问运行Test4函数会有什么样的结果? //

// 答:(1)能够输出hello world; (2) 此时的str指向了常量区,不需要程序员释放,程序结束自动释放。 //

Test4();

// ----------------------------------------------- // 请问运行Test5函数会有什么样的结果? //

// 答:(1)能够输出hello world; (2)但是调用结束要对内存释放,否则内存泄漏;

搜索更多关于: C++对象模型[2]指针与引用 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

[C++对象模型][2]指针与引用 一 概括 指针和引用,在C++的软件开发中非常常见,如果能恰当的使用它们能够极大的提高整个软件的效率,但是很多的C++学习者对它们的各种使用情况并不是都了解,这就导致了实际的软件开发中经常会内存泄漏,异常抛出,程序崩溃等问题。对于C和C++的初学者,那更是被它们搞的迷迷糊糊。本篇作为[深入C++]系列的第一节,我们就带领大家把指针和引用这个基本功练好。 二 指针 指针,指针的定义是什么呢?好像要想给个直接的定义还是很难的哦,所以我们这里用它的语法结合图来认识它。 int i = 10; int *p = NULL; p = &i; int j = *p; int **pP = NULL; pP = &p; 在上面的几条语句中,&用来定义引用变量或对变量取其地址,*用来定义指

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com