const的理解和测试---待补充,2019-6-29
// ConsoleApplication4.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
using namespace std;
//以下程序说明const 修饰常规变量,类,对象,函数,成员函数,参数,返回值,引用等情况下的使用和说明
class _constTest
{
//默认构造函数,拷贝构造函数,拷贝赋值函数
private:
_constTest():m_iconstMenber2(0){}
_constTest(int n) : m_iconstMenber2(n){}
int m_iMember1;
const int m_iconstMenber2;
protected:
public:
};
int main()
{
//unsigned int a = 100;
//int aa = 102;
//unsigned int const b = aa;
//a = b;
/*const 修饰常规变量,*/
//iPtr
const int b = 100;
//b = 101;//不允许通过b变量来修改数值,b变量的数据类型也不能变
//b = (unsigned int)102;
char icd = 0;
char * iPtr = &icd;
*iPtr = 100;
iPtr = NULL;
/*底层const,指针指向的对象不能变,规律:const在*的左边*******************************************************************/
char const * iPtr1 = NULL;//OK:const修饰iPtr指向的对象(内容)不可修改
iPtr1 = &icd;
icd = 101;
//*iPtr = 101;//ERR:iPtr指针指向的对象(内容)不可通过iPtr修改,
const char * iPtr2 = &icd;
//*iPtr2 = 102;//ERR:iPtr指针指向的对象(内容)不可通过iPtr修改,
iPtr2 = NULL;//ERR:说明指针是可以修改的
icd = 102;//
//iPtr1 = (const unsigned char *)iPtr1;
const char const * iPtr5 = &icd;//其实这里两个const是重复的,只需要一个就可以了的
iPtr5 = NULL;
//*iPtr5 = 105;
/*顶层const,指针不能变,规律:const在*的右边*******************************************************************/
char * const iPtr3 = &icd;
//iPtr3 = NULL;//ERR:const 修饰的是int* 的指针iPtr1,就是这个指针变量的值不能变,就是iPtr1指向的地址不能变
*iPtr3 = 103;
icd = 103;
/*指针不能变,指针指向的对象也不能变,规律:* 左右都有const********************************************/
char const * const iPtr4 = &icd;
//iPtr4 = NULL;
//*iPtr4 = 103;
const char * const iPtr6 = &icd;
//iPtr6 = NULL;
//*iPtr6 = 106;
//char * const const iPtr7 = &icd;
//iPtr6 = NULL;
//*iPtr6 = 106;
//const * char str14[10] = 100;
/*二级指针的const实例说明*/
//这是一个二级指针,一级指针
const int strLen = 4;
char const strArray[strLen][10] = {"aaa","bbbb","cc66666cc", "ddddddd"};
//const char strArray[4][10] = {"aaa","bbbb","ccccc", "ddddddd"};//和上面一行是一样的
//二位指针初始化,两级指针都要分别new空间
char **cPtr = new char *[strLen];
for (int i = 0; i < strLen; i++)
{
cPtr[i] = new char[10];
strcpy_s(cPtr[i], strlen(strArray[i]) + 1, strArray[i]);
printf("cPtr[%d] 地址 = %p, cPtr[%d] = %s \n", i, cPtr[i], i, cPtr[i]);
}
for (int i = 0; i < strLen; i++)
{
delete cPtr[i];
cPtr[i] = NULL;
}
delete cPtr;
cPtr = NULL;
const char * iPPtr[4] = {NULL};//首先是一个数组,数组里面存放char *的指针,初始化为NULL,
const char * const iPPtr1[4] = { "AAA", "BBBB", "CCCCC", "DDDDDD" };
for (int i = 0; i < 4; i++)
{
iPPtr[i] = strArray[i];
printf("i = %d, iPPtr = %s \n", i, iPPtr[i]);
//strArray[i] = iPPtr1[i];
//strArray = NULL;
}
const char * const * iPtr8 = iPPtr;
iPtr8 = iPPtr1;
const char * const * const iPtr9 = iPPtr;
//iPtr9 = iPPtr1;
const char ** const iPtr10 = iPPtr;
//iPtr10 = iPPtr1;
//char * const * const iPtr11 = iPPtr;
//iPtr11 = iPPtr1;
//*iPtr11 = NULL;
getchar();
return 0;
}