#include <iostream>
using namespace std;
void test(int* p)//void test(int* &p)
{
cout<<"In the function;from main"<<endl;
cout<<"Where is the p"<<endl;
cout<<&p<<endl;
cout<<"What's the p point to"<<endl;
cout<<p<<endl;
cout<<"p=new int[10]"<<endl;
cout<<"What's the p point to now"<<endl;
p=new int[10];
cout<<p<<endl;
cout<<"And the location of p is unchanged"<<endl;
cout<<&p<<endl;
cout<<"Out of the function ;return to main"<<endl;
}
int main()
{
int *p=NULL;
cout<<"Where is the p"<<endl;
cout<<&p<<endl;
cout<<"What's the p point to"<<endl;
cout<<p<<endl;
test(p);
cout<<"What's the p point to now"<<endl;
cout<<p<<endl;
return 0;
}
Where is the p
0012FF28
What's the p point to
00000000
In the function;from main
Where is the p
0012FE54
What's the p point to
00000000
p=new int[10]
What's the p point to now
001E1AD0
And the location of p is unchanged
0012FE54
Out of the function ;return to main
What's the p point to now
00000000
请按任意键继续. . .
小结:
指针归根到底也是一个值,存放在栈中,有他自己的位置,他的值是指向内存的地址的。
就像这段代码,函数test的形参一开始指向的内存地址是main函数中p指向的地址。
至此,main函数中的p在test函数中没什么作用了,而test函数的作用仅仅是为形参p开辟空间,造成内存泄露。
分享到:
相关推荐
此问题在C++编程中较为常见,特别是在类中包含指针成员变量时更为显著。 ### 拷贝构造函数导致指针挂起的研究 #### 1. 拷贝构造函数简介 在C++中,拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,使其...
在C语言中,函数参数的传递主要有两种方式:传值(Pass by ...传指针则提供了修改实参的能力,但需要小心处理指针,防止出现悬挂指针或内存泄漏等问题。理解这两者的区别和使用场景,是提升C语言编程技能的关键步骤。
### C语言中的指针与内存操作 在C语言中,指针是一种非常强大的特性,它允许程序员直接控制和管理内存。对于那些希望深入了解程序底层机制的开发者而言,掌握指针和内存操作至关重要。本篇文章将深入探讨C语言中的...
1. 函数传参:指针可以作为函数参数,允许函数修改实参的值,实现参数的“传递”。 2. 指针数组:可以声明指向数组的指针,如`int (*p)[5];`,`p`是一个指向含有5个整数的数组的指针。 3. 多级指针:可以声明指向...
在处理指针时,尤其需要注意内存的分配和释放,以防止内存泄漏。以下是对标题和描述中提到的知识点的详细解释: 1. **函数返回值中的指针类型**: - 当函数返回一个指针时,需要清楚地知道这个指针指向的是静态...
在学习指针的过程中,还应注意内存管理和指针操作中可能出现的错误,如野指针、内存泄漏等问题,这些错误可能会导致程序运行不稳定或崩溃。因此,合理地使用指针,并在适当的时候释放不再使用的内存,是编程实践中的...
14.7.5 函数传参实例五——判断数组排列方式后执行不同的函数 14.8 数组在对象中的传参 14.9 对象数组 14.10 在对象数组中初始化成员变量 14.11 指针数组 14.12 枚举常量与数组 14.13 多维数组 14.14 多维数组的初始...
14.7.5 函数传参实例五——判断数组排列方式后执行不同的函数 14.8 数组在对象中的传参 14.9 对象数组 14.10 在对象数组中初始化成员变量 14.11 指针数组 14.12 枚举常量与数组 14.13 多维数组 14.14 多维...
本文将深入探讨指针在C++中的几种常见用法,包括与普通变量、数组以及函数相结合时的具体应用场景。 #### 指针基础 指针是一种特殊的变量类型,它可以存储内存地址。在C++中声明一个指针时,需要指定指针所指向的...
本文将深入探讨一维指针和二维指针在函数传参中的应用,以及如何通过它们来改变函数外部的变量或指针本身。 一维指针是一个指向单个变量的指针,它可以用来传递变量的地址到函数,从而在函数内部对这个变量进行修改...
易语言可能采用了智能指针或者其他自动垃圾回收机制,确保了在多线程环境下,内存的分配和释放不会出现冲突,防止了内存泄漏和数据竞争等问题。 此外,资源的描述中还提到了“编译器级别的优化方案”。这意味着在...
如果基类析构函数不是虚函数,则需要显式调用基类的析构函数以避免资源泄露等问题。 26. **结构和类有什么区别?** - 在C++中,结构体(struct)和类(class)非常相似,主要区别在于默认访问级别不同。结构体的成员...
指针做形参做局部变量以及内存分配 指针做形参是编程语言中的一种重要概念,它对程序的执行和结果产生重要影响。在C语言中,指针做形参可以分为一级指针和二级指针两种形式。一级指针做形参是指形参是一个指针变量...
但是要注意,这些操作需要遵循Android内存管理的规则,避免内存泄漏。 总结,JNI传参实例展示了如何在Android应用中使用JNI进行跨语言通信,包括定义本地方法、生成和实现JNI接口、编译C++代码以及在Java中调用这些...
### 经典企业面试题整理(C语言)知识点解析 #### C语言关键字数量及特性 - **关键字总数**:C语言包含32个关键字。值得注意的是`sizeof`被视为关键字而非函数,这一特性对于理解编译原理及代码优化具有重要意义。 ...
此外,需要注意内存释放的问题,防止内存泄漏。如果DLL内部分配了新的内存并返回了指针,那么在易语言中调用完DLL后,可能需要释放这部分内存。 5. **错误处理** DLL调用过程中可能会出现各种错误,如DLL未找到、...
避免在DLL中分配内存并在主应用程序中释放,或反之亦然,以免引发内存泄漏或访问冲突。 通过以上步骤,你可以在Delphi 7中成功调用Delphi XE编译的DLL,并传递字符串参数。理解DLL的工作原理、参数类型和跨版本的...
在编程领域,"段错误"(Segmentation Fault)是一个常见的运行时错误,通常发生在尝试访问内存空间时,程序试图访问的区域不在其被允许的内存段内。这可能包括访问未初始化的指针、越界数组访问、非法内存释放等。在...
在你的作业中,要求所有的成员函数传参和返回值都是引用类型,这意味着在调用这些函数时,你不会创建新的对象副本,而是直接修改或访问原有的对象。 动态内存开辟是C++中处理大量数据或复杂数据结构时必不可少的...
3. **常量函数传参的几种方式**: - 值传递:函数接收参数副本,不影响原变量。 - 引用传递:函数接收参数的引用,修改会影响原变量。 - 常量引用传递:函数接收常量引用,不能修改参数值,但可以节省拷贝开销。 ...