C++指针的相关研究

//常量指针(指向常量的指针)【常量在前面 指针在后面 所以叫常量指针】
//为了解决指针可能误修改或破坏内存中的数据,我们可以对内存中的数据加上写保护。即具有这种属性的指针只能够读出内存中的数据,
//却不能修改内存中的数据。我们把具有这种属性的指针称为指向常量的指针,简称常量指针。
#include<iostream.h>
int main()
{
int t=1;
const int i=2;
const int *p;//常量指针允许指向相同类型的别的变量(或常量)可以用常量赋值,但不能间接引用修改数据,也可以更改它的指向。
// p=&i;
// p=&t;
*p=10;//不能间接引用修改数据
return 0;
}


//指针常量(指针在前常量在后面)【int * const p=&f 】
#include<iostream.h>
int main()
{
int t=9;
int i=100;
//const int i=100;//不允许指针常量指向常量
int *const p=&i;//变量i的内存地址变成了 常量的内存地址(不能被重新赋予新的地址)
*p=1;//可以间接赋值
//p=&t;//不能改变他的指向
return 0;
}
#include<iostream.h>
int main()
{
const int i=90;
//int *p=&i;//不能把常量的地址给指针变量
const int *p=&i;//常量指针则可以
return 0;
}


#include<iostream.h>
void main()
{
//指向常量 的 指针常量 ——————都不行 故*p=9与p=&b 都是错的
const int a=10;
int b=20;
const int*const p=&a;
cout<<*p<<endl;
}


//******************************************************** 关于*(p)++的研究
#include<iostream.h>
int main()
{
int a[6]={5,3,4,1,2,6};
int *p=a;
cout<<(*p)++<<" "<<*p<<endl;//(*p)++是表示使p所指向的元素增加1,但这里输出*p并不是如此
cout<<*p<<endl;//*p所指向的元素在这里才实现自增1,可见第一个元素的内存地址存的值已经自增1了,但是一开始却表达不出来。
return 0;
}



#include<iostream.h>
int main()
{
int a[6]={5,3,4,1,2,6};
int *p=a;
for(int i=0;i<6;i++)
{
cout<<(*p)++<<" ";//输出的结果并不是6 7 8 9 10 11;而是完全把首元素当成5开始自增了
}
return 0;
}



#include<iostream.h>
int main()
{
int a[6]={5,3,4,1,2,6};
int *p=a;
cout<<a[0]++<<endl;//这个a[0]++也是如此,输出来的元素也不会增加
return 0;
}

 

posted @ 2011-12-09 00:45  keiling  阅读(214)  评论(0编辑  收藏  举报