您的位置:首页 > 编程语言 > C语言/C++

C++数组和指针

2015-07-06 13:38 435 查看
1:数组

数组是由类型名、标识符和维数组成的复合数据类型,类型名规定了存放在数组中的元素的类型,而维数则指定数组中包含的元素个数。

数组定义中的类型名可以是内置数据类型或类类型;除引用之外,数组元素的类型还可以是任意的复合类型。没有所有元素都是引用的数组

数组的维数必须用值大于等于 1 的常量表达式定义

const int a = 3;
//const unsigned sz = get_size() 错误,运行时才知道大小的不行
//int a = 3;错误
int b[a];


使用一组字符字面值初始化字符数组时,一定要记得添加结束字符串的空字符。例如,下面的初始化将导致编译时的错误:

const char ch3[6] = "Daniel"; // error: Daniel is 7 elements


与 vector 不同,一个数组不能用另外一个数组初始化,也不能将一个数组赋值给另一个数组,这些操作都是非法的

与vector的下表类型是vector::size_type不同数组的下标类型是size_t;

2:指针

int main()
{
int v = 5;
int *p = 0; //p initialized to address no object 输出为00000000
int *p1 = &v;

cout << "p's address is " << p <<endl<< "p1's address is " << p1 << endl;

}


不初始化的坏处:如果使用未初始化的指针,会将指针中存放的不确定值视为地址,然后操纵该内存地址中存放的位内容。使用未初始化的指针相当于操纵这个不确定地址中存储的基础数据。因此,在对未初始化的指针进行解引用时,通常会导致程序崩溃

把 int 型变量赋给指针是非法的,尽管此 int 型变量的值可能为 0。但允许把数值 0 或在编译时可获得 0 值的 const 量赋给指针:

int ival;
int zero = 0;
const int c_ival = 0;
int *pi = ival; // error: pi initialized from int value of ival
pi = zero;      // error: pi assigned int value of zero
pi = c_ival;    // ok: c_ival is a const with compile-time value of 0
pi = 0;         // ok: directly initialize to literal constant 0


对指针进行初始化或赋值只能使用以下四种类型的值

1. 0 值常量表达式(第 2.7 节),例如,在编译时可获得 0 值的整型 const 对象或字面值常量 0。

2. 类型匹配的对象的地址。

3. 另一对象末的下一地址。

4. 同类型的另一个有效指针。

把 int 型变量赋给指针是非法的,尽管此 int 型变量的值可能为 0。但允许把数值 0 或在编译时可获得 0 值的 const 量赋给指针:

指针可以修改变量的值,对于一个指向const的值的指针也要限定为指向const对象的指针,不然指针修改值就会变动,这样const的值就没意义了。const double *p;

在实际的程序中,指向 const 的指针常用作函数的形参。将形参定义为指向 const 的指针,以此确保传递给函数的实际对象在函数中不因为形参而被修改。

/article/2906393.html const指针和指向const对象的指针的区别

动态数组

每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆。C 语言程序使用一对标准库函数malloc 和 free 在自由存储区中分配存储空间,而 C++ 语言则使用 new 和 delete 表达式实现相同的功能。

数组变量通过指定类型、数组名和维数来定义。而动态分配数组时,只需指定类型和数组长度,不必为数组对象命名,new 表达式返回指向新分配数组的第一个元素的指针

int *pia = new int[10]; // array of 10 uninitialized ints


此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。

可使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化,对于动态分配的数组,其元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。

int *pia2 = new int[10] (); // array of 10 uninitialized ints
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: