常量, char[], const char[], char*, const char*, char* const以及const char* const的詳解

来源:https://www.cnblogs.com/starchenzyme/archive/2020/02/13/12285629.html

註意,這裡用char類型只是舉了一個例子,其他的int之類的也通用。 1: 常量: 例子: char str[] = "Hello world!"; char ch = 'a'; int i = 12345; 我們看等號右邊的,這些就叫常量。常量在程式運行過程中不會發生改變,並且隨著程式一起裝入記憶體 ...


註意,這裡用char類型只是舉了一個例子,其他的int之類的也通用。

1: 常量:

例子:

char str[] = "Hello world!";
char ch = 'a';
int i = 12345;

我們看等號右邊的,這些就叫常量。常量在程式運行過程中不會發生改變,並且隨著程式一起裝入記憶體。

2: char[]:

例子:

char str[] = "Hello world";

str是一個字元型數組(字元串)變數。可讀可寫。

3: const char[]:

例子:

const char str[] = "Hello world!";

str是一個只讀字元串。它的記憶體單元中的值不可以被改變,只能在變數分配記憶體的時候被初始化進去。如果這樣寫就是非法的:

const char str[] = "Hello world!";
str = "ypa!";//Error Example

4: char*:

例子:

char str[] = "Hello world";
char *lpstr = str;

 lpstr是一個指向字元數組(字元串)變數的指針變數。lpstr的值可讀可寫,也就是在不同時間它可以指向不同的的記憶體單元;同時,它所指向的記憶體單元str也可讀可寫。

5: const char*:

例子:

const char str[] = "Hello world!";
const char *lpstr = str;
//這樣寫也一樣:
//char const str[] = "Hello world!";
//char const *lpstr = str;

lpstr是一個指向只讀字元串的指針變數。lpstr的值可讀可寫,也就是在不同時間它可以指向不同的的記憶體單元;但是,它所指向的記憶體單元str只讀不可寫。如果這樣寫就是非法的:

const char str[] = "Hello world!";
const char *lpstr = str;
*lpstr = 'y';//Error Example

6: char* const:

例子:

char str[] = "Hello world!";
char* const lpstr = str;

lpstr是一個指向字元數組(字元串)變數的只讀指針量。lpstr的值只讀不可寫,也就是它被初始化了時候就不能再指向其他變數了;但是,它所指向的記憶體單元str是可讀可寫的。如果這樣寫就是非法的:

char str1[] = "Hello world!";
char str2[] = "ypa!";
char* const lpstr = str1;
lpstr = str2;//Error Example

7: const char* const:

例子:

const char str[] = "Hello world!";
const char* const lpstr = str;

lpstr是一個指向只讀字元串的只讀指針量。lpstr的值只讀不可寫,也就是它被初始化了時候就不能再指向其他變數了;並且它所指向的記憶體單元str也是只讀不可寫的。如果這樣寫就是非法的:

const char str1[] = "Hello world!";
const char str2[] = "ypa!";
const char* const lpstr = str1;
*lpstr = 'y';//Error Expmple
lpstr = str2;//Error Example

總結:

類型 自己記憶體單元的屬性 所指向的記憶體單元的屬性
char[] 讀/寫
const char[] 只讀
char* 讀/寫 讀/寫
const char* 讀/寫 只讀
char* const 只讀 讀/寫
const char* const 只讀 只讀

 


您的分享是我們最大的動力!

更多相關文章
  • 樣式提供了重用一組屬性設置的實用方法。它們為幫助構建一致的、組織良好的界面邁出了重要的第一步——但是它們也是有許多限制。 問題是在典型的應用程式中,屬性設置僅是用戶界面基礎結構的一小部分。甚至最基本的程式通常也需要大量的用戶界面代碼,這些代碼與應用程式的功能無關。在許多程式中,用於用戶界面任務的代碼 ...
  • static void Main(string[] args) { InsertionSortDemo(); Console.ReadLine(); } static void InsertionSortDemo() { Random rnd = new Random(); int[] arr = ...
  • 長鏈接發送request/response時, 絕大部分包都是小包, 而每個小包都要消耗一個IP包, 成本大約是20-30us, 普通千兆網卡的pps大約是60Wpps, 所以想要提高長鏈接密集IO的應用性能, 需要做包的合併, 也稱為了scatter/gather io或者vector io. 在 ...
  • 如何重構我們以前寫的垃圾代碼——觀察者模式 首先來看下 GoF 對觀察者模式的定義: 多個對象間存在一對多關係,當一個對象發生改變時,把這種改變通知給其他多個對象,從而影響其他對象的行為 就是說當一個對象要發生變化時,要通知其他多個對象同時要發生相應的變化的行為。 從這句定義上來看,重點在於兩個“對 ...
  • 假設一個密碼要求長度大於 8 位,至少包含一個數字、一個小寫字母、一個大寫字母,如果用一條正則驗證? ...
  • 一、查看/刪除鏡像 1、查看所有鏡像 1 docker images 2、查看所有容器 1 docker ps -a 3、刪除鏡像 1 docker rmi [IMAGE ID] 4、刪除容器 1 docker rm [CONTAINTER ID] 5、批量刪除Tag為<none>的無用鏡像 1 # ...
  • 網站地址: https://www.90pan.com/b1268487 迅雷鏈接: magnet:?xt=urn:btih:EE4B0FE780B6EC97D6FB9A9D22A8EE1627DA78A2 占用記憶體小,文字太少再湊點字數。迅雷就是比網盤好,哦耶!!!! 到底多少字才能發佈啊——__ ...
  • 未來的某個時間點執行一次某任務的命令: ,`batch` 命令執行的結果,會發送到任務發起者的郵箱 周期性運行某任務: 命令執行的結果,會發送到任務發起者的郵箱 本地郵件服務 發郵件的協議:smtp(simple mail transmission protocol) 收郵件的協議: pop3(po ...
一周排行
  • Consul是HashiCorp公司推出的開源工具,Consul由Go語言開發,部署起來非常容易,只需要極少的可執行程式和配置文件,具有綠色、輕量級的特點。Consul是`分散式`的、`高可用`的、 `可橫向擴展`的用於實現分散式系統的服務發現與配置。 ...
  • Blazor的哪個特點, 可以讓程式員快速完成任務? 這隨筆講解的是使用代碼上下文來節約代碼, 讓驗證碼機制變得更加簡易. ...
  • 在C#中,struct和class都是用戶定義的數據類型,struct和class有許多不同之處,但主要的區別是: Class是引用類型,它保存在堆上並且能夠被垃圾回收;然而stuct是值類型,它保存在棧上或者內嵌在它的包含類型之中。因此,從總體上來說struct比class節省記憶體。 下圖是Cla ...
  • 這篇文章,我將帶領大家學習ASP.NET Core中的launchSettings.json文件。為了學習它,我們打開之前建的空白模板的ASP.NET Core項目。 從上面的圖片中你可以看到,我們項目的屬性中有一個launchSettings.json文件。那麼我們來一起學習這個重要的文件吧。la... ...
  • [TOC] 都是迭代,為啥我一定要用foreach ​ 問題起源於本人的一個練手的撲克牌程式:洗完牌之後要發給場上的三人。 ​ 只發給單個人的時候用 foreach 迴圈一下就好了,但三個人就有點麻煩了。 ​ 牌組用list保存你可能會想到這樣寫: 對於字典,可以使用 : 可能各位早會這樣弄了,讓各 ...
  • 首先以Winform項目開發舉例 1.完整的學習計劃 2.對於學習內容分類 3.良好的學習習慣 4.項目實踐 學習計劃 1.基礎篇 2.提高篇 3.應用篇 內容分類 1.語法 2.控制項 3.業務邏輯 學習習慣 1.時間安排 2.進度安排 3.記錄筆記 4.練習寫代碼 項目實踐 1.實現頁面展示 2. ...
  • 在進行 Asp.NetCore.MVC 文件上傳時,後臺無法正常讀取文件流保存,出現:Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead. 查找資料,發現需要 ...
  • 在這篇文章中,我將詳細介紹在ASP.NET Core中使用appsettings.json文件的重要性。這篇文章,我將詳細介紹下麵幾個問題:在ASP.NET Core應用程式中,有哪些不同的配置資源可用呢?什麼是ASP.NET Core appsetting.json文件?在ASP.NET Core ...
  • 這篇文章中,我將帶領大家一起詳細學習:ASP.NET Core Middleware Components.這篇文章中,我將詳細討論下麵幾個問題:什麼是ASP.NET Core 中的中間件組件?ASP.NET Core應用程式中,在哪裡來使用中間件組件?怎樣來配置ASP.NET Core 應用程式中... ...
  • 參考 ABP設計UI菜單欄的源碼分析,抽出了ABP這塊自定義擴展的實現。在ABP的源碼裡面有很多地方都用到了這種設計方式,實現了用戶自定義擴展。 新建一個空的asp.net core項目,新建一個類,源碼: StartUp類源碼: 擴展點:在 中提供用戶自定義擴展點,完美的是下瞭解耦。 參考: "B ...