<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          竟然改變不了const的值

          共 2656字,需瀏覽 6分鐘

           ·

          2023-11-10 13:54

          老王是一個硬件工程師,而且老王是一個比較厲害的硬件工程師,平時會給我們發(fā)他的硬件作品,但是老王有一個寫軟件的夢想,夢想有一天寫一些比較牛逼的軟件代碼,并以此來慰藉自己多年都沒有買房的傷痛。

          老王跟我說,他最近自己寫了些代碼,但不知道是為什么已經(jīng)把數(shù)組聲明成const了,運(yùn)行之后,數(shù)組的值還是被改變了。
          不多說,我只能上代碼給他演示說明問題
              
              
          #include "stdio.h"
          #include "stdint.h"

          void w_function(uint8_t page, uint8_t column, uint8_t reverse, uint8_t *dp) {
            uint8_t i, j, *data_temp;
            data_temp = dp;
            for(j = 0; j < column; j++) {
              *dp = (reverse == 1)? (~*dp) : (*dp);
              dp++;
            }
          }

          int main() {
            int i = 0;
            const uint8_t dp[8] = {1,2,3,4,5,6,7,8};
            const int a = 10;
            printf("Before: %d\n", a);

            int *p = (int *)&a; // 創(chuàng)建一個指向 const 變量 a 的指針,并強(qiáng)制類型轉(zhuǎn)換為 int *
            *p = 20// 通過指針修改 const 變量 a 的值

            printf("After: %d\n", a);
            for (i = 0; i < sizeof(dp)/sizeof(dp[0]); i++)
              printf("%d\t", dp[i]);
            w_function(0sizeof(dp)/sizeof(dp[0]), 1, (uint8_t *)&dp);
            for (i = 0; i < sizeof(dp)/sizeof(dp[0]); i++)
              printf("%d\t", dp[i]);
            return 0;
          }
              
              
          上面的代碼輸出是

          我們都知道const修飾的變量是不能改變它的值的,那也要說明那是在常規(guī)的方法不行,但是可以用非常規(guī)的方法。

          C語言有一個很明顯的東西,地址需要有類型

          但是C語言還有一個比較牛逼多東西,叫做類型強(qiáng)制轉(zhuǎn)換,這個東西是太屌了,只有我知道地址了,我可以把這個地址轉(zhuǎn)換成我想要的任意類型,我們在一些協(xié)議的格式收發(fā)上,結(jié)構(gòu)體類型轉(zhuǎn)換屢試不爽。

          有了上面的東西后,那我就可以對地址類型轉(zhuǎn)換,再改變地址里面存儲內(nèi)容的值了。

          ok,上面的說完了。

          詭異的是,我在我的macos上使用gcc竟然有個奇怪的問題


          但是同樣的代碼,用另外的編譯器是可以的,不過數(shù)組的值都是被改變了的。


          瀏覽 3274
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美a性爱 | 国产一级二级三级精品毛片 | 国产操逼视频豆花 | 国产精品成人午夜福利 | 日逼网站黄色 |