17.常量指针和指针常量区别?
17.常量指针和指针常量区别?
1)常量指针(指向常量的指针)
语法:const 数据类型 *变量名;
不能通过解引用的方法修改内存地址中的值(用原始的变量名是可以修改的)。
注意:
●指向的变量(对象)可以改变(之前是指向变量a的,后来可以改为指向变量b)。
●一般用于修饰函数的形参,表示不希望在函数里修改内存地址中的值。
●如果用于形参,虽然指向的对象可以改变,但这么做没有任何意义。
●如果形参的值不需要改变,建议加上const修饰,程序可读性更好。
2)指针常量(指针是常量)
语法:数据类型 * const 变量名;
指向的变量(对象)不可改变。
注意:
●在定义的同时必须初始化,否则没有意义。
●可以通过解引用的方法修改内存地址中的值。
●C++编译器把指针常量做了一些特别的处理,改头换面之后,有一个新的名字,叫引用。
3)常指针常量
语法:const 数据类型 * const 变量名;
指向的变量(对象)不可改变,不能通过解引用的方法修改内存地址中的值。
常引用。
常量指针:指针指向可以改,指针指向的值不可以更改。
指针常量:指针指向不可以改,指针指向的值可以更改。
常指针常量:指针指向不可以改,指针指向的值不可以更改。
记忆秘诀:*表示指针,指针在前先读指针;指针在前指针就不允许改变。
常量指针:const 数据类型 *变量名
指针常量:数据类型 * const 变量名
示例:
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
void func(const int *no, const string *str) // 向超女表白的函数。
{
// *no = 8;
// *str = "我有一只小小鸟。";
cout << "亲爱的" << *no << "号:" << *str << endl;
}
int main()
{
int a = 3, b = 8;
// 常量指针的语法:const 数据类型* 变量名;
// 不能通过解引用的方法修改内存地址中的值(用原始的变量名是可以修改的)。
/*
const int* p = &a;
a = 13;
cout << "a=" << a << ",*p=" << *p << endl;
p = &b;
cout << "b=" << b << ",*p=" << *p << endl;
*/
// 指针常量语法:数据类型* const 变量名;
// 指向的变量(对象)不可改变;在定义的同时必须初始化;可以通过解引用的方法修改内存地址中的值。
int* const p=&a;
*p = 13;
cout << "a=" << a << ",*p=" << *p << endl;
//int bh = 3; // 超女的编号。
//string message = "我是一只傻傻鸟。"; // 向超女表白的内容。
//
//func(&bh, &message); // 调用向超女表白的函数。
//cout << "亲爱的" << bh << "号:" << message << endl;
}