#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]指向的地址怎么得来的?
}
试了一下在监视窗口中则不能对左操作数进行赋值,说明监视中的函数运算操作是经过类型判断的。但是++pArrayofci[0]为什么会指向0x0012ff48仍然没有搞清楚
问题5是不是因为即时窗口直接修改的内存值,而不进行任何判断?