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;
}
分享到:
相关推荐
C++指针 数组 内存释放 相关说明
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++指针.ppt C++指针.ppt
C++指针的几个经典应用,帮助你深入了解C++指针的用法
在网上搜集到的C++指针资料,打包上传上来给大家下
C++ 指针用ppt详细描述,指针是难点,次文章使用ppt描述简单易学
C++ 指针 深入 教程,关于指针的重点难点,深入的讲解
c++指针讲义,是PPT文档。讲解详细,通俗易懂。
对于初学者来讲指针这个东西很烦人,理解起来并不难,但是在实际开发中该如何灵活的使用指针却是个难点。特分享《C/C++指针经验总结——经典教程》,这个教程让你更快更透彻的知晓C++指针的奥秘:)
C_C++指针经验总结.pdfC_C++指针经验总结.pdfC_C++指针经验总结.pdf
C/C++指针详解、学习建议,包含PPT和WORD共三份文档。
关于C++ 指针的讲解 (PS:这个是试试能不能上传)
c++指针数组.rarc++指针数组.rarc++指针数组.rarc++指针数组.rarc++指针数组.rarc++指针数组.rarc++指针数组.rarc++指针数组.rar
C++指针详解 C++指针详解 C++指针详解 C++指针详解 C++指针详解 C++指针详解
c++指针方面的心得
C++ 指针 实现迷宫 程序代码 C++ 指针 实现迷宫 程序代码 C++ 指针 实现迷宫 程序代码 C++ 指针 实现迷宫 程序代码
C++ 指针讲解 C++ 指针讲解C++ 指针讲解C++ 指针讲解C++ 指针讲解C++ 指针讲解C++ 指针讲解C++ 指针讲解C++ 指针讲解C++ 指针讲解C++ 指针讲解C++ 指针讲解
C++指针C++指针C++指针C++指针C++指针C++指针C++指针C++指针C++指针C++指针C++指针