您的位置:首页 > 编程语言 > C语言/C++

【C++基础】指针好难啊,一点点啃——基本概念

2014-07-31 22:04 453 查看
指针保存的是另一个对象的地址(概念真的很重要!!)

int a=1;
int *ptr = &a;//*定义一个指向int类型的指针ptr, &a取变量a的地址


引用是对象的别名,多用于函数形参,引用声明时必须初始化

int A=1024;
int &refA=A;
int &ref;//错误!!必须初始化
refA++;//操作在对象上进行,引用不变,因此A=1025


一、指针的初始化

几个概念,迷途指针==野指针==悬浮(dangling)指针==失控指针

当对一个指针delete后,会释放原来的内存,但指针变量名依然存在,值却没有设置为NULL或0,这就相当于声明一个指针时没有初始化,

当再次使用该指针时,则会出现严重错误(崩溃是肯定的,本人还没体会到多严重),以上是我的理解

原则:不能使用未初始化的指针,引申点说就是不能使用无效的指针(如上文)这就引出指针的初始化问题,

有四种值可用来初始化指针(来自C++ primer及个人理解 )

1.0或者NULL或者相应的const值

2.类型匹配的某对象的地址,用&取某变量的值

3.另一对象之后的下一地址????

4.同类型的有效指针,即不能为野指针

一些注意点如下

1.任何指针变量刚被创建时不会自动成为NULL指针,默认值是随机的

2.0值和NULL等效,表示不指向任何对象;不能用int类型变量给指针赋值,该变量是0也不行,但值是0的const量可以

int a;
int b=0;
const int c=0;
int *p;
p=a;//不能用int变量初始化
p=b;//b是0也不能用来初始化
p=c;//const就可以
p=0;//OK,相当于赋值NULL


二、指针数组、数组指针

对数组P
,区别p+1和&p+1

数组名本身就是指针,再加&,就是二级指针,加1就是移动 1*sizeof(数组大小)

#include <iostream>
using namespace std;

void main(){
int v[2][10] = {
{1,2,3,4,5,6,7,8,9,10},
{11,12,13,14,15,16,17,18,19,20}
};
int (*a)[10] = v;//数组指针---指向数组的指针
cout<<**a<<endl;            //1
cout<<**(a+1)<<endl;        //11
cout<<*(*a+1)<<endl;        //2
cout<<*(a[0]+1)<<endl;        //2
cout<<*(a[1])<<endl;        //11
}


三、函数指针、指针函数(听起来好乱!!)

四、指针和const

const char *ptr;//const指针
char *const ptr;//指向const对象的指针
//错误char const *ptr;
const char *const ptr;//指向const对象的const指针


可还是记不住啊!???因为没理解吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: