天天看点

c++基础

引用和指针

引用是就是对象本身。对应内存 就一个地址。

指针对应内存是两个地址。

对象本身一个地址, 指针一个地址。

指针的地址里面存的内容就是 对象的地址。

引用就是对象本身。

指针是转了一层啊。

指针的指针就是转了2层。

指针的指针的指针 就是转了3层。。

以此类推。

 引用就是直接取了一个别名,不需要重新开辟内存来存哪个东西的 内存。。 

 就相当于给对象取了个不同的名字 

 除了一些特殊的情况引用貌似是没有空间分配的

声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。 

形式上的区别:指针可以不初始化,引用必须初始化,且绑定后不能再变。

如果你想一会儿指向这个对象一会指向那个对象就用指针,而引用只是变量的另一个名字。

 区别本身在于,你可以理解引用就是地址 

 指针是一个int32的变量  反正一切的差别就在于那4个byte的空间 引用没有4个byte的空间。

变量的值等于地址 你指针一定义,就有空间了,指针本身是个变量,引用不是

向函数中传递指针和传递指针的引用的区别:

     如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针;

但是对于传递指针引用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了、

1,引用就是一个常量指针

2,引用是一个自动去引用的指针

java和c++引用的区别;

函数调用的时候 

指针和引用都是传地址的值过去,引用传地址没有copy,而指针就是copy了下地址,传过去了。

不同的是指针本身是个变量,引用是个常量

CCSpriteFrame* CCSpriteFrame::create(const char* filename, const CCRect& rect)

char * 和 char[]

c类型字符串和c++ std:string的互相转换

char ch[100];

string str;

把char*(c类型的string)数组转换为string:

str = ch; //即可

str.assign(ch); //也可

把string类型转换为char*数组:

strcpy(ch,str.c_str());    //即可

for(int i = 0; i < str.length(); i++)   //也可

{

    ch = str.at(i);

    ch ++;

}

比较两个字符串相等

string str1;

string str2;

strcmp(str1.c_str(),str2.c_str());

< 0 string1 less than string2

= 0 string1 identical to string2

> 0 string1 greater than string2

清空一个char*数组

memset(void *dest,int c,size_t count)

拷贝char*数组

memcpy(void *dest,const void * src,size_t count)

判断是否是一个字符串的子串

c++对象模型