关于指针的见解

最近在看c++ primer第13章复制控制。习题13.4中有个指针成员pstring,当时写构造函数初始化一个对象的时候想当然的写成了NoName(string a,int b,double c){ pstring=&a;i=b;d=c;} 写完后发现不对,因为在这个构造函数中a是一个临时的对象,当NoName这个构造函数结束后,该变量自行销毁,直接导致了指针悬空。改正办法是将a写成一个string的引用。

#include<iostream>
#include<string>
#include<string.h>
using namespace std;
struct NoName{
	NoName():pstring(0),i(0),d(0){}
	NoName(string&,int,double);
	NoName(NoName &temp);
	void show()
	{
		cout<<*pstring<<" "<<i<<" "<<d;
	}
private:
	string *pstring;
	int i;
	double d;
};
NoName::NoName(NoName &temp)
{
	pstring=&(*temp.pstring);
	i=temp.i;
	d=temp.d;
}
NoName::NoName(string& a,int b,double c)
{
	pstring=&a;
	i=b;
	d=c;
}

int main()
{
	string b="tigger";
	NoName x(b,1,2.0);
	x.show();
	NoName y(x);
	y.show();
	system("pause");
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 17:19:49

关于指针的见解的相关文章

从一级指针到二级指针

昨天,写了一些关于一级指针的见解,那么这次我们再来看看二级指针的一些用法,也可以说是我自己的一些见解 所谓二级指针其实和一级指针差不多,一级指针是存储0级指针地址的变量,(一定要记住这一点:指针也是变量,编译器会给它分配内存空间,它的内存空间和它指向的内存空间是不同的,它的内存空间里只能存储空间地址:)所以二级指针就是储存一级指针地址的变量,或者说二级指针是指向一级指针空间的变量:还可以说是指向一级指针的指针: 那么下面我们来看代码: void changePointer(char **c) {

二级指针补充

昨天对于分享了一些关于二级指针的见解,但是我感觉还是要对其在进行补充一下比较好,当时我在二级指针这方面迷糊了很久,即使是现在有时候也会犯迷糊: 当初我学二级指针的时候认为,一级指针必须指向了一个内存空间后才可以将它分配给一个二级指针: 也就是这样的: { int a; int *b = NULL; int **c = NULL; b = &a; c = &b; } 刚开始我认为如果b不指向a 的空间,则不能建立一个二级指针指向他,也就是我当时认为,二级指针是指向一级指针所指向的内存空间的:

二维数组和二级指针关系浅析

昨天写了关于一级指针的见解,即二级数组的用法和二级指针差不多,关于数组指针和指针数组这两个是不同的概念,这一点我们一定要清楚: 数组指针我们可以理解为指向数组的指针,就是一个指针: 指针数组则可以理解为数组里存的是指针,即每个储存空间上储存的是指针变量:这里储存了多个指针 一个数组可以这样定义 char a[3];分配了3个字节的内存 二维数组可以这样定义 char b[3][3];分配了3*3 即9个字节的内存 我们知道一维数组和一级指针的用法差不多,那么二级指针有和二级指针有什么关系呢? {

typedef见解即如何定义一个数组指针

今天我想说的是我关于typedef的一些见解,不能说是见解,只是理解吧! typedef:对于自定义的数据类型取一个名字:我是这么理解的: 比如说一个数组 int a[5]和一个int b,同样是定义一个数据变量,我们可不可以让int a[5] 写的像int b一样简单呢?于是就有了typedef可以对自定义的数据类型取名字:这个用法将会在结构体struct的重命名中大量使用: typedef int aa[5];//在这里定义一个数组的数据类型,记住只是分配了内存:此时并没有分配空间:类型和变

新手,对函数,函数指针,回调函数, 函数指针作为函数的返回值和block的一些见解

很多初学者,学c语言时,看到函数都觉得难,我也是,一开始觉得函数太难了,后来慢慢就理解了 第一:函数 在c语言中最简单的函数一般有四种: 1, 无返回值, 无参数. 2, 无返回值,有参数. 3, 有返回值,无参数. 4, 有返回值,有参数 1, 无返无参  定义方式:      void 函数名(); 一般不怎么用这种形式的函数,可用来输出,打印 void functionOne() { printf("无返回值,无参数"); // 没有返回值不能写return } int main

关于一级指针和二级指针的简单见解

一级指针形式如: int *p二级指针形式如: int **p 可能很多初学者会疑惑在函数参数里面到底应该用一级指针还是二级指针. 下面用几个例子说明一下: 第一个是大家都很熟悉的链表 下面是一个链表结构:   typedef struct Node{ int value; struct Node *next;} 对于添加数据到链表尾部这个函数,传入的参数必须是一个二级指针. 在传参的时候发生的赋值动作是: Node *hNode;Node **pNode = &hNode; pNode指向了h

内存四区中全局区见解

今天我把自己对于内存四区中全局区见解写出来,希望可以帮到大家,同时也希望指出我的不正! 可能有些人不解,我不是想通过,内存四区引入指针么?怎么上来就用指针? 这一点我要说明一下,我用指针是为了更清楚的表明我对于内存四区的见解,是想让大家明白,内存四区是什么?栈区,堆区和全局区之间的关系! 正如同在栈区和在堆区分配的内存空间是不同的!指针里存的是地址,地址是哪里的地址?是内存上的地址!而如果我们分不清我们的指针到底指向的是哪一个区域的地址,调用起来岂不是很麻烦.比如我们在子函数上分配了一个变量(栈

oc学习之路-----搞死指针之内存存储int类型

关于每个数据类型个字节在内存中的存储地址(以int为例) 先上图 如题,为什么说好的*p = &c是1啊,为什么是513呢,一开始,我也觉得挺惊讶的,后面听老师分析了一下才知道怎么回事,但是还是有那么一个为题不知道怎么回事,经过上网查了下资料,终于有了些眉目,但是一样有一个问题(后面回说道),切让我抛砖引玉. 要理解这个程序,首先我们要了解每个数据类型的字节排序 而字节排序又分两种:一种是 big endian 一种是little endian big endian意思是讲高序字节(高位)存储到

指针数组,数组指针、指针函数,函数指针

听到这几个名词不知道大家什么感受,反正我是一脸懵逼,不过我还是比较好学的,在老师的指导下,自己下去也钻研了一下,有一些自己的见解,我想在学习过程中也有童鞋遇到了相同的问题,希望我的总结能给你带来帮助. 首先我们想明确一下这几个概念,知道他们都表示什么,ok,请看: 函数指针:函数指针是指向函数的指针变量. 因而"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个函数都有一个入口地址,该