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;
}