数组和指针

来源:互联网 发布:淘宝放心淘是什么意思 编辑:程序博客网 时间:2024/05/16 13:01

数组

显示初始化数组元素
如果没有显示提供元素初值,则数组会像普通变量一样初始化:
在函数体外定义的内置数组,其元素均初始化为0;
在函数体内定义的内置数组,其元素无初始化;
如果元素为类类型,则自动调用该类的默认构造函数进行初始化;如果没有默认构造函数,则必须为该数组的元素提供初始化。

与vector类型不同,数组的长度是固定的。

创建和释放动态数组
通常在编译时无法知道数组的维数,所以才需要动态创建该数组

int i = 10int *p = new int[i];//uninitializedint *s = new int[5](1,2,3,4,5);//initializeddelete []p;delete []s;

指针

指针和数组用于低级操作。现代的c++程序采用vector类型和迭代器取代一般的数组、采用string类型取代c风格字符串。

void*指针
C++提供特殊的指针类型void*,它可以保存任何类型对象的地址;
支持有限的操作:
与另一个指针比较;
向函数传递void*指针或从函数返回void*指针
给另一个void*指针赋值。
不允许使用void*指针操纵它所指向的对象。

指针的算数操作

ptrdiff_t n = ip2-ip;//ok distance between the pointers

ptrdiff_t是标准库类型,在cstddef头文件中定义。是signed整型

c风格字符串标准库函数
strlen(s) 永远不要忘记字符串s结束符null;
strcpy(s1,s2) 必须确保目标字符串有足够大的空间;
strncpy(s1,s2,n) 能拷贝制定长度n的字符串,但如果n比s2中的size长度还要大,数组还是会溢出。

解决办法:采用string类型取代c风格字符串

多维数组和指针

int ia[3][4];int (*ip)[4] = ia;ip = &ia[2];
0 0