1. 必须先明确的概念:char const * 等价于 const char *
2. int * const * 能修改一级指针指向的内容(一级指针类型为int *),但不能改变一级指针。可以理解为(int *) const * 即 const (int *) * ,(类比char const * 即 const char *,不能改char;同理此处不能改int *,不过可以改int *指向的内容)
2. int * const * 能修改一级指针指向的内容(一级指针类型为int *),但不能改变一级指针。可以理解为(int *) const * 即 const (int *) * ,(类比char const * 即 const char *,不能改char;同理此处不能改int *,不过可以改int *指向的内容)
3. const int * const * 不能修改一级指针指向的内容(一级指针类型为const int *),不能改变一级指针,(const int *) const * 即 const (const int *) *, (类比char const * 即 const char *,不能改char;同理此处不能改const int *,自然不能改const int *指向的内容)
4. const int ** 可以理解为(const int *) * 指向const int * 的指针
5. 以上三者都不是类似char * const 情况(可以修改指向的内容,但是不能移动的指针)
#include <iostream>
void disp(const int * const * matrix, unsigned row, unsigned col)// int **可以转化成常量形式const int * const *
{
for (size_t i = 0; i < row; i++)
{
for (size_t j = 0; j < col; j++)
{
std::cout << matrix[i][j] << "\t";
}
std::cout << std::endl;
}
}
void modify(int * const * matrix, unsigned i, unsigned j, int value)
{
matrix[i][j] = value;
}
int main()
{
// 1.int * const *,const int * const *
unsigned row = 4;
unsigned col = 5;
int ** matrix = (int **)malloc(sizeof(int *) * row);
for (size_t i = 0; i < row; i++)
{
matrix[i] = (int *)malloc(sizeof(int) * col);
for (size_t j = 0; j < col; j++)
{
static int t = 0;
matrix[i][j] = ++t;
}
}
disp(matrix, row, col);
modify(matrix, 0, 0, -1);
disp(matrix, row, col);
for (size_t i = 0; i < row; i++)
{
free(matrix[i]);
}
free(matrix);
// 2.const int ** ,上面动态开辟的二维数组明显不是这种类型的
const int num = 5;
const int * pnum = #
const int ** ppnum = &pnum;
std::cout << **ppnum << std::endl;
system("pause");
return 0;
}