指针和整数,指针和数组,new和delete,cstring和string

来源:互联网 发布:qq音乐获取数据错误 编辑:程序博客网 时间:2024/06/06 01:33

1.指针和数字

    指针也是一种变量类型。但是,指针和整数是截然不同的两个类型,虽然指针变量里面存储的是地址(地址通常是是十六进制的整数)。

    下面用法是错误的。

int *pt;pt = 0xB8000000;    //类型不匹配

应该这样写:
int *pt;pt = (int *)0xB8000000;   

2. 使用new来分配的一维数组地址是连续的。当用for循环来动态分配二维数组时,行与行之间的地址就不一定连续了。

3. 指针和数组基本上完全等价。指针和数组名指向数组的第一个元素的地址。但二者的区别有二:

    a. 可以修改指针的值,但不能修改数组名的值,因为数组名是指针常量;即:pointname = pointname + 1 ;正确,而 arrayname = arrayname + 1错误。

    b. 对于sizeof(arrayname),得到的值是数组的大小,单位是字节,对于sizeof(pointname),得到的是指针本身的大小,通常为4个字节(根据系统存储地址的情况而变               化)

4  .cstring 和string头文件的区别:

    a. 拷贝字符串时,前者必须用strcpy或者strncpy,后者可用赋值运算符 =;

    b.前者拷贝及其他操作时,要考虑字符串越界的情况,后者不用,因为string类可根据实际情况动态增长,而不用提前制定大小(类似于容器),前者使用字符串数组来模拟字符        串,后者使用一个string类。

5. C++管理内存的方式

     a. 自动存储:局部变量;

    b. 静态存储:全局变量或者声明为static类型的变量;

    c.动态存储:new操作符分配的变量

    对于new操作符分配的变量类型,new和delete管理了一个内存池,delete指针后,是将这个指针指向的地址块上的内容delete掉了,并没有delete掉这个指针,因此还可以继续操作这个指针,如再次new操作。

    由于这个内存池的概念是全局的概念,因此,new和delete并不一定要存在于同一个函数中,可任意使用,指针要保证一个new一个delete。