没有使用空的this指针 //k-》get(); 错误,this指针为空,可以用printf(“%p“,pt)来验证,包括系统使用的内存区,就有 可能造成无法预料的结果,也可以这样这样写:char *i = “Hello“;,就是说,当*pt = 5时。
指针的初始化
初始化这个工作可以交给使用这个函数的人来完成,也可以由写这个函数的人来完成;并且在设计这个函数的时候就要确定好,指针参数是在外面初始化还是进了函数在初始化.通常“写函数的人“和“使用函数的人“可能是同一个人,但是扮演着2种不同的角色这一点在函数说明里要讲清楚,这样使用这个函数的人才知道该传递一个未初始化的指针参数还是传递一个已经初始化的指针参数.就象MSDN文档里关于函数的说明那样,参数是什么,返回值是什么,函数作用是什么,使用时的注意点都写得清清楚楚.这样,使用这个函数的人就知道该传递一个怎样的参数进去.假如传递的是一个初始化的参数进去,那么在调用这个函数之前,必须有类似的初始化的操作SimpleCat *theCat=new SimpleCat;//SimpleCat *theCat=(SimpleCat *)malloc(sizeof(SimpleCat));或者SimpleCat aCat;SimpleCat *theCat=&aCat SimpleCat Frisky;FunctionTwo (&Frisky);这个就和“或者部分“的代码差不多,省去了SimpleCat *theCat=&aCat这步,直接在调用函数的时候调用了&aCat因为返回的参数是一个地址,可以赋值给一个指针变量,该变量有没有初始化都可以.没有初始化的话相当于初始化,初始化了的话相当于重新赋值.
指向类指针如何 初始化
需要定义一个类,然后再把类指针指向这个类的地址,也可以初始化为NULL,但是NULL指针只能调用不涉及类成员变量的类成员函数。
代码示例:
#include 《iostream》using namespace std;class Test{public: void func(){cout 《《 “hahaha“ 《《 endl;} int get(){return a+b;} Test():a(1),b(2){}public: int a,b;};int main(){ Test Tc; Test *p = &Tc; //初始化类指针 p-》func(); p-》get(); Test *k = NULL; k-》func(); //正确,没有调用成员变量,没有使用空的this指针 //k-》get(); 错误,this指针为空,通过this指针调用变量所以出错 return 0;}说明:
初始化为NULL的类指针可以安全的调用不涉及类成员变量的类成员函数而不出错,但是如果类成员函数中调用了类成员变量则会出错,既然赋值为NULL的情况都可以使用,那么自然不初始化的类指针同样满足这类情况。
指向指针的指针怎么初始化int **p
任何指针的初始化操作都只有2种方法,指向指针的指针也一样的。一种是 整形字面常量 NULL 或者 0 , 比如 int **p = 0; 还有就是用一个同类型的地址值对它初始化 int *p = NULL, **q = &p强制转换是属于后面一种情况, 比如 double *q = 0; int **pv = (int**)q;
如下C语言的指针初始化是怎么初始化的呢
例如 int *pt 然后 *pt=5 这样说是不能对未初始化的指针取值!!还有 如果有指针 char* i; 不初始化直接用 *i=“Hello“; 可以吗?int *pt;/* pt是一个指向整数的指针,未初始化时,存储该指针的地址&pt是随机的,可以用printf(“%p“,pt)来验证。 就是说,该指针可能指向任意地方,包括系统使用的内存区,虽说这不是你需要的。当*pt = 5时,就有 可能造成无法预料的结果。*/你可以在定义指针的时候直接初始化,语句如下int *pt = 5;同样,也可以这样这样写:char *i = “Hello“;