程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 筆試題——通過指針修改const變量

筆試題——通過指針修改const變量

編輯:C++入門知識

首先我們先看一個例子:

#include 
#include 

using namespace std;

struct S{
        const int c; //常量普通成員變量
        static const int sc; //常量靜態成員變量 
        S():c(0){
        }   
};

const int S::sc = 0;

const int gc = 0; //常量全局變量
static const int gsc = 0; //常量靜態全局變量

int main()
{
        const int lc = 0; //常量局部變量
        static const int lsc = 0; //常量靜態局部變量

        const S ls; //局部常量結構體

        int *p;

        p = (int *)(&ls.c);
        //p = (int *)(&ls.sc);
        //p = (int *)(&gc);
        //p = (int *)(&gsc);
        //p = (int *)(&lc);
        //p = (int *)(&lsc);

        *p += 10;

        cout << *p << "\t" << ls.c << endl; // 10 10 - (1)
        //cout << *p << "\t" << ls.sc << endl; // 段錯誤 - (2)
        //cout << *p << "\t" << gc << endl; // 段錯誤 - (3)
        //cout << *p << "\t" << gsc << endl; // 段錯誤 - (4)
        //cout << *p << "\t" << lc << endl; // 10 0 - (5)
        //cout << *p << "\t" << lsc << endl; // 段錯誤 - (6)

        return 0;
}

通過上例,我們可以總結出如下結論:

1. 全局const變量和static const變量由於被存放在只讀的常量區,所在內存被訪問時會出現段錯誤;

2. 局部const變量存放在可讀寫的棧中,可以通過指針修改其值;

3. 簡單常量在編譯時被作為常量展開,所以(5)中的cout << lc << endl事實上運行的是 cout << 0 << endl;而結構體的成員常量並未做此展開。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved