字元陣列與字元常量的問題

2022-08-16 23:25:18 字數 1237 閱讀 1118

1樓:高金山

char str="name";與char str[5];str="name"

前者是宣告一個陣列,並給它賦初值,結果str的內容是'n' 'a' 'm' 'e' '\0'

後者的寫法,根本是錯誤的,不能對陣列的標識(即陣列的首地址)進行賦值樓主也許是想把前者跟:char *str="name";進行比較這句話的意思是宣告個指向常量字串的指標

它與上面前者的不同在於:

前者是陣列,其內容可以改變,比如可以str[0]='a',但陣列標識str是常量,不能改變,比如,不能str=p後者是指標,其內容是常量,不能改變,比如不能str[0]='a',但指標str是可以改變的,比如str=p

前者相當於是「常指標」或者叫「指標常量」,後者相當於是「指向常量的指標」

c++在講const關鍵字的時候有講下面三種情況:

1、常指標,指標不能被改變,指向的內容可以被改變,如char *const p;

2、指向常量的指標,指標可以被改變,指向的內容不能被改變,如const char *p;

3、指向常量的常指標,指標和指向的內容,都不能被改變,如const char *const p;

2樓:

第一個是定義陣列然後初始化,由於沒有定義陣列長度,按照初始化的字串長度再加上一個位元組的'\0',所以第一個相當於char str[5]=;而第二個先定義了一個陣列,要知道陣列名str是陣列分配到的空間的首地址,str="name"應該是等號兩邊型別不匹配的錯誤。一般的常量應該沒有記憶體地址的,除非有某個變數指向了該常量

3樓:匿名使用者

樓上的兄臺,你試過char str[5];str="name"這句沒錯了嗎?一個陣列的名字是變數嗎?退一步說,即使允許,那原來的空間編譯器也不會自動**的,至少我還沒用過那樣的編譯器...

樓主既然知道陣列名是地址常量,那麼常量當然不允許被重新賦值"name"是一個字串常量他儲存在常量儲存區,只能用一個指標指向它卻不允許改變:char* p;p="name";

一般情況下char str="name";陣列是在棧上的空間由編譯器分配,內容可以由使用者改變

4樓:匿名使用者

第二個也沒錯,只不過第二個先在棧裡分配了5個位元組的記憶體給str,然後str = "name"並不是把"name"這個有5個位元組的常量字串賦到這塊記憶體裡,而不是把這個常量的地址賦給了str,那麼str之前指向的那5個位元組的記憶體就因為沒人指向它了,而被編譯器**。

什麼是字串常量,字元常量與字串常量的區別是什麼

字串常量 一對雙引號括起來的字元序列 字串常量是由一對雙引號括起的字元序列。例如 china c program 12.5 等都是合法的字串常量。字串常量和字元常量是不同的量。它們之間主要有以下區別 1 字元常量由單引號括起來,字串常量由雙引號括起來。2 字元常量只能是單個字元,字串常量則可以含一個...

字元常量和符號常量有什麼區別?字元常量在程式設計中有

字元常量和符號常量的區別 一個常量即可以直 接用字面形式表示 稱為直接常量,如124,156.8 也可以用一個識別符號來代表一個常量,稱為 符號常量 但符號常量必須在程式中的說明部分定義,也就是說先定義,後使用。字元常量是由單個字元組成,所有字元來自ascii字符集,共有256個字元。在程式中,通常...

C語言字元陣列程式設計題,c語言字元陣列和字串程式設計題 求解

思路 按題意,用指標遍歷字串st,使用標識變數flag首次遇到字母置1並計數,遇到空格時flag重置0。注意 本程式不考慮夾雜非字母的情況,請規範輸入。比如 i am a stu dent stu dent將作為一個單詞識別。下面是 include int getwordnum char st ch...