#include<iostream>
using namespace std;
void swap1(int a, int b){//a,b只是一份拷贝。值传递
int temp = a;
a = b;
b = temp;
}
void swap2(int *a, int *b){//a,b是指向外部变量的指针。指针传递
int temp = *a;
*a = *b;
*b = temp;
}
void swap3(int *a, int *b){//指针交换了,指针指向的内容没有交换
int *temp;
temp = a;
a = b;
b = temp;
}
void swap4(int &a, int &b ){//a,b是外部变量的引用。引用传递
int temp = a;
a = b;
b = temp;
}
int main(){
int a1 = 6, b1 = 8;
swap1(a1,b1);
cout<<a1<<" "<<b1<<endl;
int a2 = 6, b2 = 8;
swap2(&a2,&b2);
cout<<a2<<" "<<b2<<endl;
int a3 = 6, b3 = 8;
swap3(&a3,&b3);
cout<<a3<<" "<<b3<<endl;
int a4 = 6, b4 = 8;
swap4(a4,b4);
cout<<a4<<" "<<b4<<endl;
return 0;
}
6 8
8 6
6 8
8 6
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
void Test(void)
{
char *str=NULL;
GetMemory(str);
strcpy(str,"hello world");
printf(str);
}
此程序中的函数void GetMemory(char *p)对p的内存改变后,为什么调用函数中str还是一个空指针?为什么对P的改变不能使str改变?
调用函数的时候使用传地址调用则对形参的改变也改变实参,所以你认为对p分配了内存,str也应当被分配了内存,但是这里所说的对形参的改变是对形参所指向的内存中的数进行操作,而你的代码中是对形参分配内存,这与对p指向的内存中的数进行操作而导致str所指向的内存中的数发生改变二者是不同的。
函数调用 编译器总要为形参只做临时副本,代码中只是为副本p分配了内存,str依然为空。
假设str有合法的内存,通过调用使p也指向这块内存,如果利用p使这块内存中的内容发生改变,则str中的内容也会发生改变。
区别以上两种情况~
如果要通过函数调用使str获得合法的内存,改正方法很多:
使用引用:
void GetMemory(char *&p)
使用引用则 p是 str的别名,为p申请内存就是为str申请内存。
使用二重指针:
void GetMemory(char **p)
{
*p=(char*)malloc(100);
}
char *str=NULL;
GetMemory(&str);
strcpy(str,"hello world");
printf(str);
使用函数返回值:
char * GetMemory(char *p)
{
p=(char*)malloc(100);
return p;
}
char *str=NULL;
str = GetMemory(str);
strcpy(str,"hello world");
printf(str);
分享到:
相关推荐
C++指针数组内存释放 C++指针是一种基本变量,包含一个实际的数据,该数据代表一个可以找到实际信息的内存地址。指针是C++编程中非常重要的概念,许多程序和思想依靠指针作为他们设计的基础。 定义指针变量 定义...
C++指针与引用的区别 指针和引用是C++语言中两种不同的概念,初学者容易把它们混淆一起。这两种概念都是地址的概念,但它们有很多不同的特点和应用场景。 相同点 1. 都是地址的概念;指针指向一块内存,它的内容...
C++指针练习题详解 本文将详细解释 C++ 指针练习题,包括选择题和填空题,涵盖了指针的基本概念、指针运算符、指针数组、字符串处理等多方面的知识点。 一、选择题 1. 选择题 1:对数组 a 的引用不正确的是() ...
这份"**C++指针资料集合**"显然是一个宝贵的资源,包含了关于C++指针的多种学习材料,旨在帮助程序员深入理解和熟练运用指针。 C++中的指针本质上是一个变量,它存储的是另一个变量的内存地址。理解指针的三大关键...
本笔记将深入探讨C++指针的精髓,包括其基本概念、使用方法以及高级应用。 首先,我们要理解指针的基本原理。在C++中,指针是一个变量,它存储的是另一个变量的内存地址。当我们声明一个指针变量时,例如`int *p;`...
### C和C++指针详解 #### 指针的概念 指针是一种特殊的数据类型,在C和C++语言中有着非常重要的地位。它主要用于存储内存地址,并通过该地址访问内存中的数据。理解指针需要从四个方面入手:指针的类型、指针所...
C/C++指针详解 C/C++指针是编程语言中的一种基本数据类型,它们可以指向内存中的地址,可以存储变量的值,也可以存储函数的地址。指针的使用可以提高程序的效率和灵活性,但是也增加了程序的复杂度和出错的可能性。...
C++指针经典教程 本教程旨在帮助初学者更好地理解和掌握C++指针的使用,涵盖了指针的基本概念、复杂类型的分析、指针的类型、指针所指向的类型、指针的值和指针本身所占据的内存区等方面的知识。 一、复杂类型的...
本文将通过PPT的形式详细解析C++指针的使用。 首先,指针是C++中的一种特殊变量,它存储的是另一个变量的内存地址。这个地址是一个整数形式的常量,代表了内存中的一个位置。例如,如果有一个整型变量`i`,其地址...
C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针介绍.ppt C++指针...
根据提供的文件信息,标题与描述均为“C++指针方面的心得”,这表明文章将主要围绕C++语言中的指针概念及其使用技巧进行探讨。由于标签部分与内容并不相关,因此我们将忽略这部分信息,直接从标题和描述中提取并展开...
C++指针详解 C++指针是非常重要的概念,但许多人却感到头秃。只有彻底理解指针,才能更好地掌握C++语言。下面,我们将详细介绍指针的四个要素:指针的类型、指针所指向的类型、指针指向的内存区、指针自身占据的...
### C++指针经典应用详解 #### 指针与数组的隐式转换 在C++中,指针与数组之间存在一种特殊的关联性。数组名实际上可以被视为指向该数组第一个元素的指针。这一点在代码片段中得到了体现: ```cpp char str[] = ...
本文将深入探讨“C++指针数组”的概念、用途以及相关操作。 一、指针与数组的基础知识 1. 指针:在C++中,指针是一个变量,它存储了另一个变量的地址。通过指针,我们可以间接访问和修改被指向的变量。指针的声明...
"C++指针面试题经典"这个资源,很可能是针对C++开发者,特别是初级到中级水平的程序员设计的面试题集合,旨在测试和提升他们在指针方面的理解与应用能力。金山公司的面试题历来以深度和实用性著称,这些题目和解答...
C++指针.ppt C++指针.ppt
### C++指针应用教学:让你不再害怕指针 #### 前言:复杂类型说明 在编程领域,特别是对于C++这样的强类型语言而言,理解指针的概念及其使用方式至关重要。指针作为C++中一种特殊的变量类型,能够直接操作内存地址...
在这个名为"C/C++指针的用法总结实例工程"的项目中,我们将深入探讨五种关键的指针相关概念,包括双重指针、引用、指针函数、指针数组以及数组指针,并通过实际的例子来帮助理解这些概念。 首先,让我们看看双重...
### C++指针的透彻分析 #### 指针的基本概念 指针是一种特殊的数据类型,用于存储内存地址。理解指针的概念对于掌握C++编程至关重要,因为指针不仅能够帮助程序员更高效地管理内存资源,还能实现更加灵活的数据...