C++指针

xiaoxiao2026-05-23  13

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] //trueDate* 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语言指针详解
转载请注明原文地址: https://www.6miu.com/read-5049260.html

最新回复(0)