- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++ 笔记 2007 年 3 月 30 日
1、数组是自动分配空间,指针要手工分配空间(int *p = new int;)
2、在 Unix 上,程序出现段错误的时候,系统会生成core 文件,会把出现错误的那一刻的程序镜像保存在此文件中
3、结构的成员变量出现数组: struct Account{
long id ;
//char name[ 50 ] ;
//char password[ 10 ] ; char * pname ;
char * ppwd ; double balance ;
};
数组长度 100-200 字节,最好用数组做,这样方便
数组很大的时候,可以考虑用指针,赋值的时候要注意:
a.pname = new char[50]; strcpy(a.pname , huxinzhe);
在结构声明时,不能给成员变量赋值
结构声明只是声明了一种数据类型,还没有为这个结构申请空间,赋值的数据没有空间保
存
4、危险指针的用法
使用NULL 指针的内容 ---隐蔽性不高,容易发现
使用没有初始化的指针 --- 会导致无意当中修改其它变量,破坏性很大,避免的办法
int *p = NULL;
使用已经被 delete 的指针内容 --- 修改其它变量 避免的办法 delete p ; p=NULL;
返回一个局部变量的地址
由函数申请空间,由调用者释放
#include iostream using namespace std;
char * readLine(){
char * line = new char[ 100 ] ; //在函数中申请了空间,但是没有地方释放strcpy( line , hello world ) ;
coutline = line endl;
return line ; //返回变量的指针,若是局部变量,在函数返回的时候,就消失了,若在堆中申请空间,没有释放空间的机会
}
int main(){
char * p = readLine();
coutreturn from readLine endl; coutp = p endl;
delete p; //释放别人申请的空间,不安全return 0 ;
}
解决的办法 : 在函数外部申请一个指针并初始化,作为参数传给函数,这样可以保存数据并返回
在参数中传数组的起始地址,和数组长度只要是参数传指针,指针在传给函数之前要进行初始化
5、编译的时候不想看到警告信息 g++ -w
6、函数指针的声明:
函数的名字就是这个函数的首地址 函数指针之间的赋值,也要同类型的函数指针是不需要释放的。
函数指针,设计通用算法
7、多层指针 int i = 10;
int * p = i; int ** pp =p;
int**(*ppp) = pp;
*p = i ;
*pp = p;
**pp = i;
多层指针的使用 :
int ia[2][3] = {{11,12,13},
{21,22,23}}; //声明并定义一个二维数组cout ia[0] endl; //打印的是 ia 的第一个数组的首地址
int * p = ia[0]; //保存 ia 第一个数组的首地址cout a[0][2] endl;
cout p[2] endl; //与上面一行具有相同的效果 。
ia[0]的类型就是int*类型的,指向ia 的第一个数组ia 也是个指针类型,指向那个二维数组 ,是 int**
二维数组是一个二级指针
二维数组的每个元素是一级指针
int (*pp)[3] = ia; //行指针,指向二维数组的一行,[]中的数字表示每一行的元素个数
cout pp[1][1] endl; //通过二级指针去数组元素 pp[1][1] = *( *(pp+1) +1 )
行指针可以描述指向数组的元素个数,以行为单位,加1 就是指针指到下一行打印数组在内存中地址
int (*p1)[3] -- p1 的类型是int[3] p1+1,走 3 个 int,一个数组的长度int ** p2 -- p2 的类型是int* p2+1,走 1 个 int
8、char* names[100]; 声明一个数组,每个元素类型是char*
chat* names[3] = {liucy,huxz,tangliang}; //这样的声明更清晰的说明是 char
的二维数组
for(int i = 0 ; i 3 ; i++){
cout names[i] endl; //打印每个元素
}
9、void*
任何类型的变量的地址都可以把地址存进来
通用指针的存储,不能做任何运算,是纯粹的存储地址而用
10、const 与指针
const int *p
文档评论(0)