c語言中char a hello為什麼可以通過a也就是將指標當作char型別的陣列就可以直接訪問到字元

時間 2021-09-02 07:17:47

1樓:陽光上的橋

是這樣的,指標都可以當陣列使用,陣列實際上是常量的指標。

2樓:匿名使用者

你的陣列沒有學好啊。。。例如陣列char a[10],那麼a的型別為char *

你這裡的指標a其實是指向字串的首地址,而在c語言裡面沒有字串型別,字串是以字元陣列的形式儲存。所以,這裡指標a其實是指向字元陣列的首地址,故a[1]輸出e

不知道你看懂沒。。。

3樓:匿名使用者

c/c++把陣列名和指標視為是相等的東西。也就是說 char a="hello";和char *a=「hello";的效果是一樣的。都可以認為是定義了一個指標或者一個陣列。

4樓:徐徐隨風倒

首先要清楚 陣列的本質也是指標 (書上都有講解的吧)

瞭解了上面一點,我們來說程式 a 的本質是 *(a + 1)

所以printf("%c",a[1])的結果 是輸出字元 e

5樓:匿名使用者

你去看看指標和陣列的關係啊,這裡的a和陣列首地址一個意思,a[1]就是e

6樓:匿名使用者

因為陣列的存放和字串的存放都是連續的記憶體

7樓:匿名使用者

指標a其實是指向字串的首地址

c語言中為什麼char *a;

8樓:阿波羅的同行者

char*a="abcd"; 中a指標指向的地址儲存的內容"abcd"為字串常量,是放在靜態儲存區;

char a[10]; 儲存的內容放在棧上;

用scanf 進行輸入操作時,只能修改棧中的變數值,靜態儲存區的常量值不能被修改,所以會報記憶體錯誤

9樓:帥文玉告水

char*a=

(char

*)_a;

//表示將變數_a進行強制型別轉換為char*型別比如:

char _a;

char *a = (char *)_a; // 就是將char型別的變數_a轉換為char *型別,並賦值給*a

10樓:l語言之父

不知道樓主你想問什麼,char * a是一個名叫a的字元型指標變數,可以存放字元變數的地址,如

11樓:煙火夜空

c語言中,* 除了表示 「乘」外,還表示 「指標」的意思。

這個 char *a 就是定義 a 為 指標型別,指向 的內容 為 char 型的 資料。

12樓:楓若神明

char *a;分配了一個指標,但是沒有給它分配存放資料的空間大小。就像酒店老

板預計要造5個房間,為101,102,103,104,105,房間號是有了,但是要把具體的房間給造出來。如果沒有造房間,空有房間號,顧客是無法住的。

char *a="hello world"; 這個就相當於本來就造好了一個房間,現在只是把這個房間掛個號叫101。

明白了嗎?

13樓:匿名使用者

char *a只是定義了一個指標,a並沒有指向實際的地址空間應該在scanf("%s",a);之前加一段為a分配地址空間的程式a=malloc(100);為a分配100個位元組的空間。所有最終程式應該為

char *a;

a=malloc(100);

scanf("%s",a);

14樓:

char 本來就是用來接字元的,並且是單個字元,長度只佔1個位元組。正常我們輸入是

char a;

scanf("%s",&a);

char定義時用單引號,只能有一個字母,數字。char c='c'。

所以如果你想用char儲存字元,就得用陣列了。建議使用string……

15樓:雲帆00滄海

char *a;//宣告a是char *型別,但沒有分配儲存空間,要使用就要用malloc分配動態記憶體

char *a = 「hello world」;//存放在只讀資料段中

char a[10];//分配10個char的空間,

16樓:上官蕭敬

char *a是指a的地址,不是a的值。

c語言中*p代表指標。

地址是不可以直接賦值的。

17樓:天降轅石

char *a,是一個指向char型別的指標,裡邊只能存放指向char型別的指標,

"%s",是指向字串的。最關鍵的你沒有初始化,這是個野指標,沒有指定是很危險的啊。

18樓:さくらんぼ櫻桃

這樣很容易崩潰,a沒初始化

c語言中char *a[ ]什麼意思,他和char (*)a[ ]有什麼什麼區別?

19樓:匿名使用者

char *a表示的是陣列a是一個指向char的指標型別陣列,相當於a裡面的每一個元素都實際值都是一個指向字串的指標(即儲存某個字串的首地址)

後面這個你應該要問的是char (*a)吧,不然的話就和第一個一樣了

char (*a) [n]表示的是指向一個元素為n的字串陣列的指標,說白了就是一個陣列指標(指向陣列的指標)。這個和函式指標有點像 int (*p) (int,int),表示指向返回值為int,並且含有2個int變數的函式

20樓:凌亂心扉

兩者區別如下:

一、」讀「」寫「能力

char*a="abcd";此時"abcd"存放在常量區。通過指標只可以訪問字串常量,而不可以改變它。

而char a[30]="abcd";此時"abcd"存放在棧。可以通過指標去訪問和修改陣列內容。

二、賦值時刻

char*a="abcd";是在編譯時就確定了(因為為常量)。

char a[30]="abcd";是在執行時確定

三、指向地址所儲存的值不同。

對於char**p1,*p1的型別為char*型,而**p1的型別才是char型。

對於char*類指標p2,*p2就是char型。

char*a="abcd";存於靜態儲存區。在棧上的陣列比指標所指向字串快。慢

char a[30]="abcd";存於棧上。快。

四、記憶體分配方式

記憶體分配有三種:堆區和棧區、靜態儲存區。功能不同;使用方式也不同。

1、棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

2、堆:就是那些由new或malloc分配的記憶體塊,在不適用時,要手動用delete或free來釋放記憶體區域。

3、靜態儲存區:記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。它主要存放靜態資料、全域性資料和常量。

但是,良好的程式設計習慣是:如果某動態記憶體不再使用,需要將其釋放掉,並立即將指標置位null,防止產生野指標。

21樓:匿名使用者

char *a是錯誤的,只能定義char *a[任意整數];

或者char *a[4或者其他整數或者不填]=「abc」;

或者char *a[3或者其他整數或者不填]=;

或者char *a[2或者其他整數或者不填]=;

或者char k,j,l,*a[3]=;

char (*)a也是錯誤的,只能定義為(char *)a[任意整數];

首先說下第一個,以char *a[4];為例, 這語句是定義一個指標型陣列,他的元素都是指標。指標是可以直接來指向一個字串的,用法是char *p="good。指標型陣列中每個元素都是指標,則每個元素都可以去定義一個字串或者是定義一個變數;所以如果有一個a[4][4]=; 現在就可以用char *p[4]=; 這樣的好處是節約了空間,一個陣列被定義下來後,記憶體就被分配了,如果這個陣列在後面的語句中不再使用了,那它就佔著空間,使得原始檔很大,如果使用指標陣列,就很容易解決這個問題了,因為只要讓指標陣列在指向其他的字串或者其他的一些變數 ,這樣原來的空間就被釋放了

(char *)a[4]的意思是將指標型陣列a中的元素a[4]強行轉化為char型別

22樓:狂盜一枝梅

char *a一般用於函式中形參的宣告,特別只用於一維陣列;char(*)a不明白什麼意思,難不成是將a陣列強制轉換成字元型???只是猜測,不要多想呵。

23樓:楊武威

char *a[ ]相當於char** a,是指標的指標;

char (*)a[ ] 是char型別指標陣列;

(純屬個人理解,僅供參考)

24樓:小小的

含義是一樣的。其實陣列也是指標。都是宣告瞭a這個char*型別陣列。雖然有語法錯誤,但是意思是那樣的。

25樓:匿名使用者

char* a:a首先是個陣列,陣列中的每個元素是char*型別的,也就是每個元素是一個指向char型別的指標,至於char(*)a,圓括號一般是用作強制型別轉換的,這種寫法沒有見過,編譯器應該分析不出這個語法,會報錯

26樓:快來見本大人

char *a[ ] 表示一個陣列a,陣列裡的元素型別是char *

char (*)a[ ] 表示一個指標變數a,指向的變數型別是 char 的陣列

c語言中char * a=(char *)_a什麼意思?

27樓:刁煊胥歆然

定義一個儲存char型變數地址的指標q,並把變數a的地址儲存到q指標中

此時q中儲存的是&a(即a在記憶體中地址)

如果在程式中出現(並不是最開始的定義指標時)的*q則表示q指標中儲存的地址所指向的變數,

在你定義的這個中*q就等於a

28樓:宓靖善密

在c語言中,char*

q=a;定義一個指向字元型別的指標q,並將它初始化為a。

這裡a一般應該是一個地址,通過*q我們就可以訪問a處記憶體的值。

示例程式如下:

#include

int main(int argc, char* argv)編譯後的執行結果如下圖所示:

29樓:李瓊範

這裡是要注意一個引數的問題,引數分為:形參與實參形參就是形式引數,也就是函式定義中的引數

實參就是實際引數,也就是函式呼叫中的引數

如int a(int a, char * b){}上面的函式定義中,函式定義括號中的引數a與b就是形式引數,也就是形參而當你在呼叫這個函式時,這個引數就是實際引數如:

int d = 32;

char * s = "hello josin";

//注意下面的函式呼叫:

a(d, s);

此時函式a的引數中d與s就是實際引數。也就是實際傳遞給函式的引數。

30樓:匿名使用者

_a是形參,因為前面有const修飾所以在子函式中,_a是不能被修改的,

所以要處理_a中的資料就要將_a的值賦給子函式裡的變數,使用這個變數來對_a中的資料進行運算,其他指標之類不用再講了吧,這裡面有個指標做形參和普通變數做形參的區別,你要了解這個區別,這個就很容易懂了。

31樓:天雲一號

char *a = (char *)_a;  // 表示將變數_a進行強制型別轉換為char *型別

比如:char _a;

char *a = (char *)_a;  // 就是將char型別的變數_a轉換為char *型別,並賦值給*a

32樓:檢言尉遲月明

從這個式子可以判斷a

也為指向字元型的指標,所以式子的意思是

定義一個指向字元型的指標q,並把它初始化為a,即此時q,a指向相同的字元變數

c語言中!10的值為0,為什麼,c語言中a 1 0 的值是什麼

ch陳先生 計算機記憶體儲存的時候認為規定了,只有0,沒有 0。c語言是一門程序導向的 抽象化的通用程式設計語言,廣泛應用於底層開發。c語言之所以命名為c,是因為c語言源自kenthompson發明的b語言,而b語言則源自bcpl語言。1967年,劍橋大學的martinrichards對cpl語言進...

c語言中怎麼表示,C語言中 怎表達?

四舍 入 標準的c語言中沒有 這個符號及常量,一般在開發過程中是通過開發人員自己定義這個常量的,最常見的方式是使用巨集定義 define pi 3.141592 也可以直接普通變數定義,如 double pi 3.141592 可以負責任的告訴你,c99標準裡沒提這事,但大部分實現裡 vs和gcc ...

C語言中if和switch區別,C語言中if else語句與switch語句的區別在哪裡?

風若遠去何人留 switch語句,可讀性更好,整體流程看起來清晰明確。if語句適應性更強,可以處理更多的情況。所有的switch語句都可以寫成if的形式,比如switch a 可以寫作 if a b case b else if a c case celse default.但是switch 語句,...