c++学习笔记六

指针
可以使用指针记号操作存储在数组中的数据
可以在函数中访问函数外部的大块数据
动态为新变量分配空间

1 指针的声明: long * pnumber;
2 地址运算符: &
例如:long number=1234L;
long * pnumber;
pnumber=&number;
3 间接运算符: *
4 指针的初始化 :
可以用变量地址初始化指针,代码如下:
int number=10;
int * pnumber=&number;
还可以int * pnumber=0;
5 把指针初始化为char类型
可以用字符串字面量初始化:char * str1="this is a test!"; (由于字面量是const类型,所以该指针只是指向该字符串地址,不能修改其字符串内容;若想修改其内容,可以用以下形式:const char * str1="this is a test!";)
指针数组 '
格式如下:
const char * strs[]={"first","second","third","forth","fifth"};
使用指针对字符串进行排序
让输出结果变整齐
6 常量指针和指向常量的指针
const char * strs[]={"first","second","third","forth","fifth"};
以上指针可以通过以下语名进行修改: strs[1]=strs[2];(让两个指针指向同一地址,实际字符串的地址不变)
进行如下修改后指针数组就不能修改了:
const char * const strs[]={"1","2","3","4"};


对指针及其指向的内容使用const有三种不同情况:
(1)指向常量的指针:const char * parstr="this is a test string!";(指针指向的内容不能修改)
(2)常量指针: int num=100; int * const pnum=# (存储在指针中的地址不能修改)
(3)指向常量的常量指针 int num=100; const int * const pnum=#(两者都不能改变)
7 指针和数组
指针的算术运算
指针递增一: int * pnmu[]; pnum++; (称动指针到指针指向数组的下一个元素)
计算两个指针之间的差
使用指针名的数组表示法
把数组用作指外针: int nums[2]={1,2};可以用指针表示法 如 nums[2]等同于(*data+3)
对多维数组使用指针: int bean[2][3]; int * pbean=&bean[0][0]
c样式字符串的操作
在<cctype>中声明的函数,实现分析和转换单个字符
头文件在<cstring>
连接字符串: strcat() 把第二个字串追加到第一个字串中
strncat()有三个叁数,前两个同上,第三个用于指定第二个字符串的字符个数
复制:strcpy()
比较:strcmp()
搜索:strchar()
8 动态分配内存
自由存储区:程序中没有用到的内存空间 new对应的delete 用来释放未用到的空间
数组的动态内存分配: pstring=new char[20];(分配自由存储区的内存)
删险数组时使用 delete [] pstring; 这里可以不用指定维数
动态分配内存的危险
内存泄露 new后一定要使用delete释放内存
指针和变量的作用域
自由存储区的碎片
转换指针
reinterpret_cast<指针类型>(表达式) 强制转换任何类型指针
例如:float value=2.5f;
float * pvalue=&value;
long * pnumber= reinterpret_cast<long>(pvalue); (类型为long,值本身没有变)

你可能感兴趣的:(C++)