指针

 指针不能持有非地址值例如下面的赋值将导致编译错误
// 错误pi 被赋以int 值ival
pi = ival;
指针不能被初始化或赋值为其他类型对象的地址值例如已知如下定义
double dval;
double *pd = &dval;
那么下列两条语句都会引起编译时刻错误
// 都是编译时刻错误
// 无效的类型赋值: int* <== double*
pi = pd;
pi = &dval;

 

void*表明相关的值是个地址但该地址的对象类型不知道

void *pv = pi;
pv = pd;

=======================

(1)无论是*p=0还是*p=1,都不是给指针赋值,而是让指针指向的整数的值为0或1。这个指针如果没有初始化的话,直接写这两个语句会出运行时错误。
(2)要让指针的地址值等于一个整数值,如果不用类型转换的话,除了0,其他都是不允许的。

C/C++ code

   
   
p = 0 ; // 合法,表示p是空指针 p = 20345686 ; // 非法,目的是要使指针ptr指向地址20345686(十进制)
(3)但是加类型转换后,可以直接用整数给指针赋值
C/C++ code
   
   
p = ( int * ) 20345686 ; // 合法
   
   
int *p=1; //指针p的地址值是1 *p=1; //p所指向的整数的值为1
 
 
我们知道当取一个int 型对象的地址时
int *pi = &ival;
结果是int*——即指向int 的指针当我们取指向int 型的指针的地址时
int **ppi = &pi;
结果是int**——即指向int 指针的指针当我们解引用ppi 时
int *pi2 = *ppi;
string 构造函数的第二种形式定义了一个空字符串例如
string st2; // 空字符串
我们怎样能保证它是空的当然一种办法是测试size()是否为0
if ( ! st.size() )
// ok: 空
更直接的办法是使用empty()操作
if ( st.empty() )
// ok: 空
如果字符串中不含有字符则empty()返回布尔常量true 否则返回false
可以将一个C 风格的字符串赋给一个string 对象
string s1;
const char *pc = "a character array";
s1 = pc; // ok
但是反向的转换不能自动执行对隐式地将string 对象转换成C 风格的字符串string
类型没有提供支持例如下面试图用s1 初始化str 就会在编译时刻失败
char *str = s1; // 编译时刻类型错误
为实现这种转换必须显式地调用名为c_str()的操作
char *str = s1.c_str(); // 几乎是正确的但是还差一点
c_str()返回了一个指向常量数组的指针下一节将解释常量修饰符const
const char*
str 被定义为非常量指针所以这个赋值被标记为类型违例正确的初始化如下
const char *str = s1.c_str(); // ok
string st( "The expense of spirit/n" );
st 的长度由size()操作返回不包含终止空字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值