通过实例来看看const所修饰的指针使用方法:
1、
先看一个普通的指针使用。
形式:int *pTmp
含义:一个普通的指向int类型的指针
- int main(int argc, char *argv[])
- {
- int i = 1;
- int *pTmp = &i;
- printf("pTmp = %d\n", *pTmp);
- i = 2;
- printf("pTmp = %d\n", *pTmp);
- (*pTmp)++;
- printf("pTmp = %d\n", *pTmp);
- system("PAUSE");
- return 0;
- }
输出:
- pTmp = 1
- pTmp = 2
- pTmp = 3
- 请按任意键继续. . .
没有任何问题,pTmp指针你可以任意操作。
2、
形式:const int *pTmp
含义:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变。
- int main(int argc, char *argv[])
- {
- int i = 1;
- int j = 100;
- const int *pTmp = &i; /*正确:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变*/
- printf("pTmp = %d\n", *pTmp);
- i = 2;
- printf("pTmp = %d\n", *pTmp);
- pTmp = &j; /*正确:将pTmp指向变量j的地址*/
- printf("pTmp = %d\n", *pTmp);
- (*pTmp)++; /*错误,pTmp指向的对象是只读的,编译出错提示:assignment of read-only location */
- printf("pTmp = %d\n", *pTmp);
- system("PAUSE");
- return 0;
- }
3、
形式:int const *pTmp
含义:与2相同, 表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变。
- int main(int argc, char *argv[])
- {
- int i = 1;
- int j = 100;
- const int *pTmp = &i; /*正确:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变*/
- printf("pTmp = %d\n", *pTmp);
- i = 2;
- printf("pTmp = %d\n", *pTmp);
- pTmp = &j; /*正确:将pTmp指向变量j的地址*/
- printf("pTmp = %d\n", *pTmp);
- (*pTmp)++; /*错误,pTmp指向的对象是只读的,编译出错提示:assignment of read-only location */
- printf("pTmp = %d\n", *pTmp);
- system("PAUSE");
- return 0;
- }
4、
形式:int * const pTmp
含义:pTmp不可修改,但pTmp所指向的对象可以修改。
- int main(int argc, char *argv[])
- {
- int i = 1;
- int j = 100;
- int * const pTmp = &i;
- printf("pTmp = %d\n", *pTmp);
- i = 2;
- printf("pTmp = %d\n", *pTmp);
- pTmp = &j; /*错误,pTmp不可修改,编译提示:error:assignment of read-only variable `pTmp'*/
- printf("pTmp = %d\n", *pTmp);
- (*pTmp)++; /*正确,pTmp所指向的对象可以修改 */
- printf("pTmp = %d\n", *pTmp);
- system("PAUSE");
- return 0;
- }
5、
形式:const int * const pTmp
含义:pTmp不可修改,pTmp所指对象也不能修改。
- int main(int argc, char *argv[])
- {
- int i = 1;
- int j = 100;
- const int * const pTmp = &i;
- printf("pTmp = %d\n", *pTmp);
- i = 2; /*正确*/
- printf("pTmp = %d\n", *pTmp);
- pTmp = &j; /*错误:error: assignment of read-only variable `pTmp'*/
- printf("pTmp = %d\n", *pTmp);
- (*pTmp)++; /*错误:error: increment of read-only location*/
- printf("pTmp = %d\n", *pTmp);
- system("PAUSE");
- return 0;
- }