数组与指针

数组初始化

  • 在函数体外定义的内置数组类型,元素初始化为0;
  • 在函数体内定义的内置数组类型,元素都未初始化。

int minList[5];//在函数体外定义的数组

    //主函数中显示结果
    int maxList[5] ;//函数体内定义的数组
    for (int i = 0; i < 5; i++)
    {
        cout << maxList[i] << " ";
    }
    cout << endl;
    for (int i = 0; i < 5; i++)
    {
        cout << minList[i] << " ";
    }

字符数组

    //字符串数组
    char id[] = {'2','0','1','5',NULL};//在使用时一定要注意C风格字符数组要以NULL结束
    char name[] = { 's', 'o', 'n', 'g'};
    cout << "id数组长度为:" << strlen(id) << endl;
    cout << "name数组长度为:"<<strlen(name) << endl;
    for (int i = 0; i != strlen(id); i++)
    {
        cout << id[i] << " ";
    }
    cout << endl;
    for (int j = 0;j != strlen(name); ++j)
    {
        cout << name[j] << " ";
    }

以上的输出结果为:

id数组长度为:4
name数组长度为:20
2 0 1 5
s o n g x ???????????2 0 1 5
请按任意键继续. . .

从以上结果我们可以看出,strlen总是假定以NULL结束,字符数组中必须以NULL结束,否则会出现意想不到的的结果。

指针和引用

相同
可间接访问另一个值。
不同

  1. 引用总是指向某个对象,是该对象的一个别名,定义时必须初始化。
  2. 引用初始化后,始终指向同一个特定对象,给引用赋值修改的是该引用关联的值。
  • 指向const对象的指针-指向double类型const对象的指针
//允许修改cpd的值,但不能通过cpd修改所指对象的值
const double *cpd;
  • const指针-指向double型对象的const指针
//不允许修改pcd的值,即不可以修改所指对象,但可以修改所指对象的值
double const *pcd
  • const对象的const指针
    //既不能修改指针指向,也不能修改指针对象的值
    const double pi = 3.14159;
    // pi_ptr is const and points to a const object
    const double *const pi_ptr = &pi;

指针和typedef

cstr是什么类型?

typedef string *pstring;
const pstring cstr;

指向string类型对象的const指针。

string s;
typedef string *pstring;
const pstring cstr1 = &s; // written this way the type is obscured
pstring const cstr2 = &s; // all three decreations are the same type
string *const cstr3 = &s; // they're all const pointers to string

疑问

已知p1 和p2 指向同一个数组中的元素,下面语句实现什么功能?
p1 += p2 – p1;
当p1 和p2 具有什么值时这个语句是非法的?
【解答】

此语句使得p1 也指向p2 原来所指向的元素。原则上说,只要p1 和p2 的类型相同,则该语句始终是合法的。只有当p1 和p2 不是同类型指针时,该语句才不合法(不能进行-操作)。但是,如果p1 和p2 不是指向同一个数组中的元素,则这个语句的执行结果可能是错误的。因为-操作的结果类型ptrdiff_t 只能保证足以存放同一数组中两个指针之间的差距。如果p1 和p2 不是指向同一个数组中的元素,则-操作的结果有可能超出ptrdiff_t 类型的表示范围而产生溢出,从而该语句的执行结果不能保证p1 指向p2 原来所指向的元素(甚至不能保证p1 为有效指针)。

posted @ 2015-08-07 20:56  弦断  阅读(171)  评论(0编辑  收藏  举报