c++返回局部变量的指针
函数返回指针。本来就是一个比较容易出问题的操作。在霍顿的《VC++ 入门经典》一书中,给出了一个很有代表性的例子,如下:// Ex5_11.cpp#include iostreamusing std::cout;using std::endl;double* treble(double); // Function prototypeint main(void){double num = 5.0; // Test valuedouble* ptr = 0; // Pointer to returned valueptr = treble(num);coutendl"Three times num = "3.0*num;coutendl"Result = "*ptr; // Display 3*numcoutendl;system("pause");return 0;}// Function to treble a value - mark 1double* treble(double data){double result = 0.0;result = 3.0*data;return result;}两个输出语句,一个直接输出3*5=15.另一个在一个函数中进行了乘法运算,也是5*3, 存到result变量中也没有任何问题。返回这个变量的指针,输出时再接触引用。貌似也没有错误。两条输出语句似乎都应该输出15.但事实不是这样。编译 器会抛出[Warning] address of local variable `result" returned 这样一个警告信息。程序运行后的结果也并非是我们预想的那样。第二条输出语句会输出一个不可预见的值。这是怎么回事呢?仔细分析一下,result是作用域在treble函数中的局部变量。当函数执行结束后。变量result会被析构。其原先占用的内存区域已经被系统回收,可以存储任何数据。而返回的指向该地址的指针也失去了其原有的意义。因此我们得到这样一条准则:永远不要从函数中返回局部自动变量的地址。如果你真的需要这样操作。你可以在函数的参数表中传入一个指针变量。然后将需要写入的数据写入到该指针变量指向的地址。由于该指针指向的变量,作用域在函数体 之外。因此不会在函数结束结束时被回收。现在回到我们遇到的问题。时间函数localtime就是一个返回指针的函数。返回值类 型:tm*该如何接收这个返回值?当然是声明一个与之类型相同的变量。于是你会这样写:tm* result;接下来呢?还用问?赋值嘛。是不是这样:result=localtime(....);返回什么类型,当然要给什么类型的变量 赋值。但是这样却发生了我们不想看到的结果。也许你想到了。就是这个指针!返回的指针在函数结束后不再有效。正确的方法可以是:tm result;result = *localtime(....);也可以是:tm* result;*result = *localtime(...);正确的方法的共同特点是在函数结束前,对返回的指针解除引用。然后用这个数值,为变量或指针指向的内存区域赋值。也就是说必须要复制函 数的返回值。因为函数体中变量会被析构。指针是灵活而强大的,避免低级错误,明确基本概念。才能让指针更好的为我们服务。kikcik2023-06-13 07:47:201
定义3个变量并赋值,现有一个指向最后定义的变量的指针,请使用这个指针访问所有的3
指针也是又类型的。。。tt白2023-06-13 07:14:195
C语言中如何以结构体变量的地址作为函数形参,以便将指向结构体变量的指针传递给它?
已经调通了同时以指向结构体变量的指针作为形参和实参,但不知道如何以结构体变量的地址作为形参?Jm-R2023-06-11 08:20:364
函数返回结构体局部变量的指针。函数 结束,局部变量不是被释放了吗,为什么返回 的局部结构体指针还可
结构体变量在堆中未被释放,而且返回的指针也没有被free掉,那么就是有效的韦斯特兰2023-06-11 08:20:351
指向一个结构体变量的指针,也可以指向结构体变量的任何一个成员 u2714还是u2716?
对的,尽管类型不一定匹配,但指针本质是一个表示地址的整数而已。九万里风9 2023-06-11 08:20:241
结构体变量的指针能不能做函数形式参数?
结构体变量的指针是不能做函数形式参数的,因为如果结构体变量的指针,作为函数形式参数,那么有些事情可能就不成立了,如果这些事情不成立的话,也就是结构体变量的指针,做了函数形式参数,是没有任何意义的。ardim2023-06-11 08:19:371
使用指向变量的指针变量做函数参数,编写函数求两个数的平方,立方和及平方,立方差。
给你个思路吧,写个平方出来,后面的自己模仿//求两个数的平方,成功返回0,不成为返回-1。int function(double *pNum1, double *pNum2){ if(NULL == pNum1 || NULL == pNum2) return -1;//判断指针是否为空 *pNum1 = (*pNum1) * (*pNum1); *pNum2 = (*pNum2) * (*pNum2); return 0;}铁血嘟嘟2023-06-10 08:26:411
变量的指针,其含义是指该变量的什么?
B大鱼炖火锅2023-06-10 07:46:064
1.变量的指针,其含义是指该变量的_________. a)值 b)地址 c)名 d)一个标志
变量的指针,是指该变量的地址,而不是值人类地板流精华2023-06-10 07:46:032
变量的指针和指针变量概念分别是什么?
是一个“指针”,指向某个变量。可桃可挑2023-06-10 07:45:588
变量的指针,其含义是指该变量的什么?
可以用指针引用这个变量inta=0;int*b;//b是整形指针intc;b=&a;//用b引用a,也就是b指向ac=*b;//将b指向的内容赋给c,相当于c=ameira2023-06-10 07:45:581
如何获得某变量的指针!
你问的这个话题太大。关于指针和引用要讲的东西很多。我的理解:指针: 其实指针这个概念在谭浩强的这本书上是这样说的,指针就是地址,指针值就是地址值。指针变量就是存放指针的变量,所以一定不要将指针与指针变量搞混淆了。指针仅仅是一个地址值,而指针变量就是存放指针(也就是地址的变量)指针的定义:例如整型指针: int *p;p是一个指向int类型数据的指针变量。里面存放的地址(也就是指针)是一个int类型变量的地址。指针变量时有类型的,例如p的类型就是int *表示p是一个指向int类型的指针变量。如何知道一个指针变量的类型呢,最简单的方法就是去掉变量定义语句中的变量名,剩下的部分就是其类型,这种方法适用于所有的变量定义,例如int a;a的类型是int 。 int b[10];b的类型是int[]表示是一个数组(关于数组类型这里不谈,因为这个问题很微妙,其实在c、c++中没有数组类型这个概念,包括函数类型也是一样的),int *c;c的类型是int *。int ** d;d的类型就是int **;所以通过这种方法来判断一个变量的类型是很方便的。说道指针变量,我们必须说到得有几个方面。1.指针类型。这个很重要,一个指针是有类型的,也就是一个地址是有类型的。具体说是某一个地址会指向不同类型的数据,这是不一样的,例如int *p;p是指向int型数据。 double*p1;p1是指向double型数据。但是p和p1本身在内存中占用的空间是4个字节(对于32位的系统来说),如果是在TC中编译c程序,应该是2个字节了(dos操作系统是16位的)。有人说地址不就是一个值吗,类似于0xfffdddcc这样的地址数值,为什么还分什么类型呢,我要说的是这个关系很大。我们知道指针是有运算的,int *p=&a;那么p++到底加了多少呢,不要以为是将p里面的地址值加了1,这是完全想当然。实际上加了sizeof(int)这么多个字节。也就是说加了一个int元素应该占用的字节,这样在数组中我们可以通过这种方式从上一个元素很方便的让指针变量指向下一个元素。p+5的话实际上是加了p+sizeof(int)*5这么多个字节。 另外一点事指针的类型决定了当指针解引用的时候其所以指向的内存单元中的二进制数据如何解释的问题。例如int *p=&a;那么(*p)取得的数字就是一个整型数据,如果(*((char *)p))得到的就是一个字符型数据了。p本来指向的是int型数据(有4个字节)的首地址,如果将其强制转换为一个指向char类型的指针变量,那么在解引用的时候只取第一个字节的数据,并将其解释为一个ascii码代表的字符。 还有如果是一个指向函数的指针变量,我们可以通过此指针变量直接调用函数。例如int(*function)(int);此时function指向一个函数,此函数具有一个int参数,返回一个int值。那么通过指针可以这样调用该类型的函数了int a=function(100); 或者int a=(*function)(100);其实要不要解引用都是可以的。不过以前是需要解引用的,现在c标准规定这两种方法都可以。 总的来说指针的类型很重要。2.指针与数组。我们向一个函数传递数组的时候一般是传递数组名,我们知道数组名是一个代表数组中第一个元素的地址并且数组名是不可以当左值的。其实你又没有想过数组名到底是什么呢。有人说其实数组名就是一个指针常量,是一个不可以改变的指针常量。例如:int a[10]={1,2,3,4,5,6,7,8,9,10}; 那么a可能的类型是int * const a;注意const的位置(关于指针常量和常量指针,这个以后说),那么这种说法到底对不对呢。我们可以通过sizeof运算符来计算某一种数据类型占用的存储空间。例如 sizeof(10)的值为4,注意这里我都假设在32位的操作系统上面编译。其实sizeof(10)和sizeof(int)是一样的,仅仅是求这种类型的数据占用多少内存空间,而不是说具体的某个数据占用的空间,因为对于10这个文字常量来说根本不会占用内存空间的,其实随着程序直接编码到源程序中的,不存在分配内存的问题。那么我们这样计算sizeof(a);是不是如我们所愿得到的是4呢。 结果可能会有意外,因为其值是sizeof(int)*10也就是40个字节,显然这个字节数是整个数组占用的字节数。而不是int *类型的指针变量占用的字节数,我们知道一个地址只占用4个字节meira2023-06-10 07:45:561
变量的指针,其含义是指该变量的什么?
变量的指针就是变量的地址,比如说变量i在内存中的地址为2000,那么他的指针就是2000;而不是2000这个地址中所存放的i的内容。CarieVinne 2023-06-10 07:45:541
变量的指针是指 。
变量的地址墨然殇2023-06-10 07:45:5410
局部指针变量可以指向一个全局变量的指针吗
可以,只是不同语言的表现形式和实现方式不同,但是思想上是一致的。tt白2023-06-09 08:06:131
一个变量的指针就是( ) 选择一个答案 A. 变量的名称 B. 变量的地址 C. 变量的类型 D. 变量的值
B变量的地址西柚不是西游2023-06-09 07:52:575
变量的指针,其含义是指该变量的
Btt白2023-06-09 07:52:475
变量的指针,其含义是指该变量的【 】
变量的指针就是变量的地址,比如说变量i在内存中的地址为2000,那么他的指针就是2000;而不是2000这个地址中所存放的i的内容。hi投2023-06-09 07:52:451
变量的指针,其含义是指该变量的什么?
变量的指针,其含义是指该变量的地址。存放地址的变量称为指针变量,指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。举例:int a = 68 ,系统为变量a分配的首地址为0X065FDF4H,声明空指针long *p = NULL,p=&a是存放变量a地址的指针变量,即p=&a中存放的值为0x065FDF4H(a的值为68,&a的值为0x065FDF4H)。扩展资料:对变量a的访问有两种方式:一是直接按地址0x065FDF4H找到a的存储单元,从而对变量a进行访问;二是按系统为p=&a分配的地址先找到p=&a,然后根据p,&a的值(即变量a地址0x065FDF4H)找到变量a在内存中的存储单元,从而对变量a进行访问。对于前一种访问方式称为直接访问方式,后一种访问方式称为间接访问方式。如果一个指针变量存放的是某个对象的地址,则称这个指针变量指向该对象。在C++程序设计中,指针变量只有确定了指向才有意义。西柚不是西游2023-06-09 07:52:391
变量的指针,其含义是指该变量的【 】
BNtou1232023-06-09 07:52:223
变量的指针,其含义是指该变量的
变量的指针,其含义是指该变量的地址。C语言用变量来存储数据,用函数来定义一段可以重复使用的代码,它们最终都要放到内存中才能供 CPU 使用。数据和代码都以二进制的形式存储在内存中,计算机无法从格式上区分某块内存到底存储的是数据还是代码。当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。CPU 只能通过地址来取得内存中的代码和数据,程序在执行过程中会告知 CPU 要执行的代码以及要读写的数据的地址。扩展资料:在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。现在假设有一个 char 类型的变量 c,它存储了字符 "K"(ASCII码为十进制数 75),并占用了地址为 0X11A 的内存(地址通常用十六进制表示)。另外有一个指针变量 p,它的值为 0X11A,正好等于变量 c 的地址,这种情况我们就称 p 指向了 c,或者说 p 是指向变量 c 的指针。参考资料来源:百度百科-指针FinCloud2023-06-09 07:52:211
c语言中变量的指针,其含义是指变量的什么?
指针变量是一个存地址的变量,赋值是只能传地址(跟int型只能赋值整型一样的)LuckySXyd2023-06-09 07:52:184
c++中如果函数返回指向临时变量的指针会发生什么?
a是局部变量 返回的P指针指向了局部变量的位置 。局部变量在函数运行完后就被回收了苏州马小云2023-06-08 08:01:154