ALEXKK2011

The Technical Side of alexKK2011
  博客园  :: 新随笔  :: 订阅 订阅  :: 管理

Array of Pointer & Pointer of Array

Posted on 2011-02-25 17:25  alexkk2011  阅读(295)  评论(0编辑  收藏  举报
 
#include <iostream>
using namespace std;
 
void main()
{
    int a[3] = {1,2,3};
    int b[3] = {-1,-2,-3};
    int const c[3] = {100,200, 300};
    int x, y, z; 
    const int ci = 100; 
    
    //常量指针数组
    int const *Arrayofcp[3] = {&b[0], &b[1], &b[2]}; 
    //问题1:如何给一个常量指针数组赋值? 只能一个个赋值吗?
    //Arrayofcp[3] = {&a[0], &a[1], &a[2]}; //问题2:为什么这么赋值是错的?编译错误
    Arrayofcp[0] = &c[0], Arrayofcp[1] = &a[1], Arrayofcp[2] = &ci;
    Arrayofcp[1] = &x;
    x = 99; //常量指针指向变量后, 可以直接修改变量值,
    //常量指针本身只为指针 不是常量
    //*Arrayofcp[1] = ci; //编译时错误 不能给常量赋值 原因: 常量初始化后不能被赋值
 
    //指针常量数组
    //int *const Arrayofpc[3] = {&c[0], &y, &z}; //编译错误: 无法从“const int *”转换为“int *const ” 原因;c[0]是常量 *Arrayofcp[x]不是常量
    //int *const Arrayofpc[3] = {&ci, &y, &z}; //编译错误: 无法从“const int *”转换为“int *const ” 原因:ci是常量 *Arrayofcp[x]不是常量
    int *const Arrayofpc[3] = {&a[0], &y, &z}; //指针常量数组需要初始化
    //指针常量可以修改指针所指的变量值 
    *Arrayofpc[0] = -1, *Arrayofpc[1] = -2, *Arrayofpc[2] =-3;
    //但是不能修改内存地址的值
    //指针常量本身为常量 功能是指针
    //Arrayofpc[1]=&a[1]; //编译时错误 不能给常量赋值 原因:Arrayofcp中的元素都是指针常量 一经初始化后不能指向其他地址了
 
    //指向常量(const)的指针常量(cosnt指针)数组
    int const *const Arrayofcpc[3] = {&a[0], &ci, &c[3]};
 
    //指向数组的指针常量
    //int (*const cpArrayofi)[3] = &Arrayofpc; //编译错误: 无法从“const int *(*)[3]”转换为“int (*const )[3]”
    int (*const cpArrayofi)[3] =&a; 
    //cpArrayofi = &b; //编译错误: “cpArrayofi”: 不能给常量赋值
    *cpArrayofi[0] += 10, *cpArrayofi[1] = y, *cpArrayofi[2] = *Arrayofcp[2]; 
    cout << cpArrayofi << endl;
    cout << *cpArrayofi << endl;
    cout << cpArrayofi[1] << endl;
    
    //指向常量数组的指针 
    //实际上先有数组 后有指向该数组的常量指针
    int const (*pArrayofci)[3] = &a;
    //问题3:调试时发现pArrayofci[1] 又是一个数组指针,但是pArrayofci[1]的地址是什么, 怎么表示该pArrayofci[1]的地址? 
    //pArrayofci[1]指向的地址怎么得来的?
 
}

1

试了一下在监视窗口中则不能对左操作数进行赋值,说明监视中的函数运算操作是经过类型判断的。但是++pArrayofci[0]为什么会指向0x0012ff48仍然没有搞清楚

7

 

2

 

3

 

4

 

5

问题5是不是因为即时窗口直接修改的内存值,而不进行任何判断?

6-2