64,642
社区成员
发帖
与我相关
我的任务
分享
typedef string * p;//p等价于string*
const p pt;//这里const是修饰p的。。也就是修饰指针的。。等价与string * const pt
[/quote]
这么说const放在类型的前后都是一个意思,都是用来修饰指针的。可以这样理解吧?[/quote]
就是这样~
typedef string * p;//p等价于string*
const p pt;//这里const是修饰p的。。也就是修饰指针的。。等价与string * const pt
[/quote]
这么说const放在类型的前后都是一个意思,都是用来修饰指针的。可以这样理解吧?
#include<iostream>
#include<string>
#define PRINT(S) std::cout<<S<<std::endl;
int main(int , char** )
{
//为string类型声明一个别名,别名为*ptrString
//也就是说(*ptrString)表示string类型
//那么ptrString表示指向一个string类型的指针类型
//就是可以理解ptrString = std::string*
typedef std::string *ptrString;
//验证
//1. 声明一个string类型变量str
std::string str="pointer";
//2.声明一个ptrString类型的便利pstr
//其实这个时候pstr的类型 等于(string*)
ptrString pstr = &str;
//输出
PRINT(str);
PRINT(*pstr);
//如果这个时候用const对ptrString类型的变量修饰那么
//结果会是怎么样,看楼主的例子:
// const ptrString pt;
// 这个时候上面的例子等同于:
// std::string const* pt (不是const std::string * pt哦~ )
//所以说明pt是一个指向std::string类型的指针,而且指针本身
//是不能改变的~但是指针指向的数据确实可以改变的
const ptrString pt = &str;
std::string city = "fuzhou";
//pt = city; //---> 错误,因为试图改变pt的值
//*pt = city; //--->正确,因为改变的只是指针pt指向的数据~ 而没有改变pt本身的值
PRINT(*pt);
//ps: 希望以上有助你理解,其实typedef 定义的别名有时候可以把它拆分来理解的
//好像tyepdef int (* fun)(int) 声明一样,你可以把(* fun)(int) 拆分开来
//就比较好理解该句子所要表示的含义~
//-------------------------------
return 1;
}
typedef string * p;//p等价于string*
const p pt;//这里const是修饰p的。。也就是修饰指针的。。等价与string * const pt
int a = 1;
const int *p = &a;
*p = 2; //错误
a = 2; //OK
#include <iostream>
using namespace std;
int main()
{
int a = 1, b = 2;
const int * p1 = &a;//指向const对象的指针,所指的东西为const。。
int * const p2 = &a;//const指针,自身的指向为const。。
//*p1 = 2; //错误,不能改变指向const对象指针所指对象的值。。
*p2 = 2;
p1 = &b;
//p2 = &b; //错误,不能改变const指针的指向。。
return 0;
}
至于指向const对象的const指针就是上述两种指针的效果之和。。