指针 - syhhl007的专栏 - CSDN博客

来源:百度文库 编辑:神马文学网 时间:2024/04/26 00:12:50

指针不能持有非地址值例如下面的赋值将导致编译错误
// 错误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 = π
结果是int**——即指向int 指针的指针当我们解引用ppi 时int *pi2 = *ppi;string 构造函数的第二种形式定义了一个空字符串例如string st2; // 空字符串我们怎样能保证它是空的当然一种办法是测试size()是否为0if ( ! 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()返回了一个指向常量数组的指针下一节将解释常量修饰符constconst char*str 被定义为非常量指针所以这个赋值被标记为类型违例正确的初始化如下const char *str = s1.c_str(); // okstring st( "The expense of spirit\n" );st 的长度由size()操作返回不包含终止空字符

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/syhhl007/archive/2009/10/15/4670956.aspx