1.简单概念:
常量指针:
定义指针时的格式 :
<数据类型> const *<指针变量名> (可以不赋初值,但是不建议)
指向常量的指针,指针所指向的值不可以修改,可以修改指针的值(或者说改变这个指针所指向的变量名)。
指针所指向的值可以为变量(当为变量时,变量短暂常量化)或者常量。
多用于往函数内传递的数据仅做只读操作时。
指针常量:
定义指针时的格式 :
<数据类型> *const<指针变量名> (必须赋初值)
指针本身是一个常量,可以修改指针所指向的值,不可以修改指针的值(或者说不可以改变变量名)。
指针所指向的值只可为变量。
多用于固定指针的指向,不发生地址偏移。ps:数组名等价于指针常量。
常量指针常量:
定义指针时的格式 :
<数据类型>const *const<指针变量名>(必须赋初值)
实际上就是常量指针和指针常量的结合,就是指向常量的指针本身也是个常量,不可以修改指针所指向的值,也不可以修改指针的值(或者说不可以改变变量名)。
指针所指向的值可以为变量(当为变量时,变量短暂常量化)或者常量。
多用于传入函数的数据做只读操作,并且该数据的首地址不做偏移。(比如数组或者字符串)。
2.练习的例子
库函数strcpy的重写
// strcpy.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
size_t mystrlen(char const *const pstr){
size_t index = 0;
while (pstr[index]!='\0')
{
++index;
}
return index;
}
char *const mystrcpy(char * const pdeststr, char const * const psrcstr){
int i= 0;//偏移用的变量
int index = mystrlen(psrcstr);//字符串长度,包括/0
if (pdeststr != psrcstr)
{
if (pdeststr>psrcstr)
{
while (index>=0)
{
*(pdeststr + index)=*(psrcstr+index);
index--;
}
}
else{
while (i<=index)
{
*(pdeststr+i) = *(psrcstr+i);
i++;
}
}
}
return pdeststr;
}
int _tmain(int argc, _TCHAR* argv[])
{
char str[99] = "abcdef";
printf("%s\n", mystrcpy(str , str+2));
printf("%s\n",str);
return 0;
}
当传入的为指针常量的时候,想要获得地址偏移后的值*(p+i),*p=*(p+0)。