Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140052
  • 博文数量: 34
  • 博客积分: 1557
  • 博客等级: 上尉
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-22 19:30
文章分类

全部博文(34)

文章存档

2017年(1)

2016年(1)

2015年(4)

2014年(2)

2011年(8)

2010年(6)

2009年(12)

我的朋友

分类: C/C++

2009-12-03 17:28:56

C++指针,引用和const的学习经验
很久没有看C++了,一直在忙导师的一个项目,终于在一个通宵之后完成了这个学期的主要任务!导师的项目是考试院里的一个项目,很重要,关系到研究生和博士生录取和分数等工作。所以我还是可以看到一些机密信息的
O(∩_∩)O~。
 
1.指针和const
指针指向 某一数据类型的变量的地址,比如 int * ipt;
int age=10;
int * ipt=&age;
那么*ipt 和age的值相等,&age,ipt指向的内存地址也相等。
在指针函数中,如 int dosmth (int *a, int *b);
void dosmth (int *a, int *b)
{
  *a+=10;
 * b=10;
}
在调用这个函数以后,dosmth(&ix,&iy);那么ix iy的值就会发生改变
也就是说在函数int dosmth (int *a, int *b)中改变了他们的值。
如果只想显示结果,不允许函数修改指针所指向的地址中的内容
那么就得用下面这个函数
void doth(const int *ipa,const int *ipb)
{
   cout<<*ipa+*ipb;
   /* 如果尝试修改 ipa,ipb所指向的内容,那么会出现错误*/]
   *ipa=10+*iptb; //error
}
 
2.指针指向哪里?
例如 char *pch="lovestanford";
那么 *pch等于 l;
*"lovestanford"==l /true
输出字符
while(pch)
{
  cout<<*pch;
  pch++;
}
数组或者字符串数组的名字指向的就是数组的第一个元素的地址
 
void displaychar(char * pch)
{
  while(*pch)
 {
  //code block
   pch++;
 }
}
 
 
char name="lovestanford";
displaychar(name);
 
3.const
 const int *p; 那么意味着不允许通过 *p来修改它所指向的内容的值
 int const *p; 一旦赋值后就不能修改它所指向的地址
 
int a=10,b=20;
 const int *p=&a;
 *p=30 ;//error
 p=&b;// ok
int const *q=&b;
 *q=123; //ok
  q=&a;  //error
 
4.C++引用
int age=99;
int &pt=age;
那么age pt的值 和内存单元相等
age==pt;
&age==&pt; 
 
void ref_do(int &ia)
{
   ia+=10;// 修改了
}
 
int age=10;
cout<
ref_do(age);
cout<
 
 
void ref_did(const int & ib)
{
 ib+=10; //error
 cout<
}
 
cout<
ref_did(age) ;// 20
cout<
只有自己编程才能体会到其中的奥秘
 
 
 
阅读(1180) | 评论(0) | 转发(0) |
0

上一篇:linux下Eclipse c++开发

下一篇:指针,引用

给主人留下些什么吧!~~