`
yunchow
  • 浏览: 324366 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C++指针

    博客分类:
  • C++
阅读更多
C++ 里有字符串类型string ,最大可支持1G,可用string.size()求得长度
而数组长度要用strlen(...)方能求出.
字符数组要用strcpy()进行赋值,而string 类型变量可直接用'='进行赋值
相应的strcat()可替换成'+=',strcmp()==0可替换成'==','>',由此C++比C方便的多.
我们利用string name;name.c_str();可将c++字符串转化成C风格字符串.

指针是用来保存地址的变量.
&是用来取地址的,而数组名也是一个地址,这一点要注意.
#include <iostream.h>
//using namespace std;
int main()
{
	double d = 12.34;
	cout << &d << endl;
	cout << *&d << endl;
	*&d = 56.34;
	cout << d << endl;
	int a[5] = {1,2,3,4,5};
	cout << *a << endl;
}

#include <iostream.h>
//using namespace std;

struct Date{
	int year;
	int month;
	int day;
};
int main()
{
	Date d={2002,7,6};
	cout << "&d=" << &d << endl;
	cout << "&d.year=" << &d.year << endl;//输出会一样
}

//指针
#include <iostream.h>
//using namespace std;

char* input (char* p)
{
	cout << "input your name:" ;
	cin >> p;  //如果p指向的是一个int,那么此处为*p,char是特殊处理
	return p;  //C++的这种处理是为了与C语言相兼容
}
int main()
{
	char name[20];
	cout << input(name) << endl;
}

二级指针加两个'*',使用时也是一样.
建议在程序里不要超过二级指针.

//多级指针
#include<iostream>
using namespace std;

int main()
{
	int n = 100;
	int* p = &n;
	int** q = &p;
	int*** r = &q;
	cout << "***r=" << ***r << endl; 
}


Any data type in C++ can be a pointer type.
指针数组:(难点)
int* a[5];//申明了5个指向整形的指针.
int (*a)[5];//申明了一个指向整形数组的指针.


#include <iostream.h>
using namespace std;

int main()
{
	int a[5] = {3,4,5,6,7};
	for(int i=0; i<5; i++)
		cout << a[i] << ' ';
 	cout << endl;
	int* p = a;   //指针可以当成数组的首地址一样使用.
	for(int i=0; i<5; i++)
		cout << p[i] << ' ';
	cout << endl;
}


//数组的地址的运算
#include <iostream.h>
using namespace std;

int main()
{
	// conclusion:
	// a+i == &a[i]
	// *&a[i] == a[i]
	// 注意越界访问,破坏其它变量

	int a[5] = {3,4,5,6,7};
	cout << 'a=' << a << endl;
	cout << 'a+0=' << a+0 << endl;
	cout << "&a[0]=" << &a[0] << endl;
	cout << 'a+1=' << a+1 << endl;
	cout << "&a[1]=" << &a[1] << endl;
	cout << 'a+2=' << a+2 << endl;
	cout << "&a[2]=" << &a[2] << endl;
	cout << 'a+3=' << a+3 << endl;
	cout << "&a[3]=" << &a[3] << endl;
	cout << 'a+4=' << a+4 << endl;
	cout << "&a[4]=" << &a[4] << endl;
}


//指针的加加运算
int a[5] = {3,4,5,6,7};
int* p = a;
for(int i=0;i<5;i++)
	cout << *(p++) <<endl;

//注意此时的P已经指向了最后地址
cout << "p-a=" << p-a << endl;//输出为:5


一定要注意字符地址,特殊处理.输入输出的时候,会输相字符串.

指针在使用前必须初始化.
指针的类型决定了指针所参与的运算.
* 指针只能进行加减法运算.

结构指针:
结构是一种数据类型
结构类型也有指针.
int a[5];
int (*p)[5];//指向一个数组的指针
p = &a;
*p == a;	//true
(*p)[3] == a[3] //true

Date* p;
(*p).year 可简化成:p->year//两者含义完全相同.









***************************************************************
***************************************************************



内存管理与引用

内存的申请与释放
* 堆空间
分配:申请,借用
回收:释放,归还
new 类型 结果是一个地址,在堆中申请一个变量的空间,返回这个变量的地址.
delete 地址,delete new int;//这样写毫无意义.
Date* p = new Date;//此时P在栈里,而空间却在堆里.
//eg.
#include <iostream.h>
using namespace std;

int main()
{
	double * p = NULL;	//空指针
	p = new double;		//申请空间
	cout << "p=" << p << endl;
	cout << "*p=" << *p << endl;
	*p = 123231.3242;
	cout << "*p=" << *p << endl;
	delete p;		//释放空间

	int n;
	cout << "input the number: " ;
	p = new double[n];	//申请一个数组空间
	cout << "input " << n << " data:";
	for(int i=0; i<n; i++ )
		cin >> p[i];
	for(int i=n-1; i>=0; i-- )
		cout << p[i] << ' ';
	cout << endl;
	delete[] p;		//归还一个数组空间

	//释放空间后,P没有任何变化.指向了一块释放了的地方
	cout << "after delete : p=" << p << endl;
	p = NULL;
}


0
0
分享到:
评论

相关推荐

    C++指针 数组 内存释放.docx

    C++指针数组内存释放 C++指针是一种基本变量,包含一个实际的数据,该数据代表一个可以找到实际信息的内存地址。指针是C++编程中非常重要的概念,许多程序和思想依靠指针作为他们设计的基础。 定义指针变量 定义...

    C++指针与引用的区别

    C++指针与引用的区别 指针和引用是C++语言中两种不同的概念,初学者容易把它们混淆一起。这两种概念都是地址的概念,但它们有很多不同的特点和应用场景。 相同点 1. 都是地址的概念;指针指向一块内存,它的内容...

    C++指针练习题(适合初学者的练习题)Word格式

    C++指针练习题详解 本文将详细解释 C++ 指针练习题,包括选择题和填空题,涵盖了指针的基本概念、指针运算符、指针数组、字符串处理等多方面的知识点。 一、选择题 1. 选择题 1:对数组 a 的引用不正确的是() ...

    C++指针资料 集合!!

    这份"**C++指针资料集合**"显然是一个宝贵的资源,包含了关于C++指针的多种学习材料,旨在帮助程序员深入理解和熟练运用指针。 C++中的指针本质上是一个变量,它存储的是另一个变量的内存地址。理解指针的三大关键...

    C++指针精髓 笔记

    本笔记将深入探讨C++指针的精髓,包括其基本概念、使用方法以及高级应用。 首先,我们要理解指针的基本原理。在C++中,指针是一个变量,它存储的是另一个变量的内存地址。当我们声明一个指针变量时,例如`int *p;`...

    C和C++指针讲义

    ### C和C++指针详解 #### 指针的概念 指针是一种特殊的数据类型,在C和C++语言中有着非常重要的地位。它主要用于存储内存地址,并通过该地址访问内存中的数据。理解指针需要从四个方面入手:指针的类型、指针所...

    c_c++指针详解 指针详解

    C/C++指针详解 C/C++指针是编程语言中的一种基本数据类型,它们可以指向内存中的地址,可以存储变量的值,也可以存储函数的地址。指针的使用可以提高程序的效率和灵活性,但是也增加了程序的复杂度和出错的可能性。...

    C++指针经典教程(指针专讲)

    C++指针经典教程 本教程旨在帮助初学者更好地理解和掌握C++指针的使用,涵盖了指针的基本概念、复杂类型的分析、指针的类型、指针所指向的类型、指针的值和指针本身所占据的内存区等方面的知识。 一、复杂类型的...

    C++指针用ppt详解

    本文将通过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++指针介绍.ppt C++指针...

    c++指针方面的心得

    根据提供的文件信息,标题与描述均为“C++指针方面的心得”,这表明文章将主要围绕C++语言中的指针概念及其使用技巧进行探讨。由于标签部分与内容并不相关,因此我们将忽略这部分信息,直接从标题和描述中提取并展开...

    C++指针详解(经典,非常详细).docx

    C++指针详解 C++指针是非常重要的概念,但许多人却感到头秃。只有彻底理解指针,才能更好地掌握C++语言。下面,我们将详细介绍指针的四个要素:指针的类型、指针所指向的类型、指针指向的内存区、指针自身占据的...

    C++指针经典应用

    ### C++指针经典应用详解 #### 指针与数组的隐式转换 在C++中,指针与数组之间存在一种特殊的关联性。数组名实际上可以被视为指向该数组第一个元素的指针。这一点在代码片段中得到了体现: ```cpp char str[] = ...

    c++指针数组.rar

    本文将深入探讨“C++指针数组”的概念、用途以及相关操作。 一、指针与数组的基础知识 1. 指针:在C++中,指针是一个变量,它存储了另一个变量的地址。通过指针,我们可以间接访问和修改被指向的变量。指针的声明...

    c++指针面试题经典

    "C++指针面试题经典"这个资源,很可能是针对C++开发者,特别是初级到中级水平的程序员设计的面试题集合,旨在测试和提升他们在指针方面的理解与应用能力。金山公司的面试题历来以深度和实用性著称,这些题目和解答...

    C++指针.ppt格式版本

    C++指针.ppt C++指针.ppt

    C++指针应用教学:让你不再害怕指针

    ### C++指针应用教学:让你不再害怕指针 #### 前言:复杂类型说明 在编程领域,特别是对于C++这样的强类型语言而言,理解指针的概念及其使用方式至关重要。指针作为C++中一种特殊的变量类型,能够直接操作内存地址...

    C/C++指针的用法总结实例工程

    在这个名为"C/C++指针的用法总结实例工程"的项目中,我们将深入探讨五种关键的指针相关概念,包括双重指针、引用、指针函数、指针数组以及数组指针,并通过实际的例子来帮助理解这些概念。 首先,让我们看看双重...

    C++指针的透彻分析

    ### C++指针的透彻分析 #### 指针的基本概念 指针是一种特殊的数据类型,用于存储内存地址。理解指针的概念对于掌握C++编程至关重要,因为指针不仅能够帮助程序员更高效地管理内存资源,还能实现更加灵活的数据...

Global site tag (gtag.js) - Google Analytics