C語言,char a a abc abc為什麼可以直接賦值給a?a分配動態記憶體

2021-04-12 07:18:52 字數 4260 閱讀 6603

1樓:

a=(char *)malloc(10*sizeof(char));這一行在這個bai**中千

du萬不能要:如果這zhi樣寫,申請

dao的10個位元組還沒有用就把它內的標容識指標a用a="abc";指向了別處,那10個位元組就釋放不了了,會產生所謂記憶體洩漏問題。有char *a;和a="abc";就非常好了。在a是char *型指標時,a="abc";的意思不是將字串abc賦給a,而是「建立一個常字串abc,並將首地址(第一個字元的地址,這裡就是a的地址)賦給指標變數a。

以後就可以通過指標a來操作字串abc了,這裡指標a也不能再讓它指向別處,否則abc就再也找不到了……希望能幫到你。

2樓:聽不清啊

a=(char *)malloc(10*sizeof(char));

a="abc";

這兩個語句bai重複給 a 賦值du

,前一個賦值就作廢zhi了,申請到的空間dao也就被丟棄了。

下面版一個賦值是讓a指向一

權個系統中字元常量區的地址(只是把一個地址賦值給a,並不是把字串賦值給a)。

3樓:匿名使用者

因為字元指標變數可以儲存字串的首地址。所以這條賦值語句實質是把字串「abc」的首地址存入字元指標變數a中。並不需要分配動態記憶體。

4樓:匿名使用者

就算不動態分配也可以直接賦值啊。建議先學習一下什麼是指標,搞清楚指標和陣列的區別。

5樓:良德廉永安

1、之所以要bai動態的分配內

du存是因為有zhi些時候在編寫程式的dao時候無法確定專其佔用的記憶體大小,這個屬時候就可以動態的分配給其一段記憶體空間,等到程式執行時在具體確定所需要的記憶體單元空間。

2、動態分配的記憶體空間是在堆(heap)上申請的,這部分的記憶體空間是有程式設計師自己管理的,需要程式設計師自己負責這些記憶體空間的釋放,使用free函式。

c語言中, char*a a=「abc」 if(a==「abc」)為什麼恆為假

6樓:千鋒教育

這樣比較的只是記憶體地址

正確的字串比較方法是使用strcmp(char *s1,char *s2)函式比較,需#include

當strcmp()返回0則s1和s2是相等的

7樓:快樂家____歡樂

儲存字元要用單引號,不是雙引號

c語言,char a[]="abc"。

8樓:匿名使用者

等價於char a[4]="abc"。

還有復個自動加上的字元制串結束符。

這是陣列初始化自然會分配記憶體,因為在初始化時使用了""引號,所以會自動加上\0。

一個char是8個位,也就是一個位元組,所以須要在棧上開闢四個字元的大小空間。

有一種情況例外

char *const p = "abc";

該 字串被分配到字元常量區。返回一個指標交給p。並不會開新的棧上空間。

只所以要加const是因為他指向的是靜態常量不能修改。當然你可以改這個p指向的地址

9樓:匿名使用者

像這樣的問題bai最好自己du測試一下,

下面是zhic、c++測試dao,, 如果自己不動專手,學不到東西的屬

#include

#include

using namespace std;

char ss="abc";

int main()

結果 4313088 abc

10樓:匿名使用者

1. 會,系統在初始化時就為字串"abc「分配了記憶體

2. 這個」abc"的地址就是陣列a的首地址

char *a;a="abc"與char*a;*a="abc"char *a="abc"有什麼區別嗎?

11樓:

1,char*a;*a="abc" 是錯誤的, *a是字元,不是字串。

2,另外兩句完全一樣。雖然編譯能通過,但是你這句本身就是錯誤的:字串定義應該是 const char *a = "abc"; 因為字串儲存在不可讀記憶體中,所以c語言中字串的的返回值是 const char*.

3, 如果要得到能讀寫的字串請使用字元陣列: char a = "abc"

12樓:

char *a;

a = "abc";

和char *a;

*a = "abc";

作用相同 就是將字串陣列的首地址給char 指標變數a(假設16位地址值,要被截斷成8位

char *a =「abc」 可以看作是 char a="abc";

13樓:太叔青芬俞環

不行p1沒有初始化(也就是常說的野指標),它指向的空間是未知的先初始化:

p1=char(**)malloc(10*sizeof(char*));

//分配10個char*的空間

p1[0]=(char*)malloc(sizeof(a));

//給p1[0]分配合適空間

strcpy(p1[0],p)

//現在可以了

c++語言中,為啥char指標型別能賦值? 如char* a="abc";

14樓:

char* a="abc";——建立一個常字串abc,將第一個字元的地址賦給char *型指標a。這有不妥?什麼型別的指標都可以賦值,不能賦值的指標怎麼工作?

比如int a,*k=&a,*q=k;。

15樓:匿名使用者

char *a和char a一個意思

在c語言中char a[]={'a','b','c'}和char a[]="abc"有什麼區別 它們各在記憶體裡佔多少和位元組

16樓:匿名使用者

char a= 這是一個字元陣列,佔3個位元組。 char a="abc" 則不同,它是一個字串,最後還有一個'\0'結束符,佔4個位元組

c語言中陣列裡的a[10]={'a'},這個a為什麼可以賦給他變數?

17樓:戶哲茂

char a[10]=可以分成兩步.

char a[10],就是建立地址和空間。

char a[10]=給這個空間賦值,這個公式翻譯過來就是char a[10]=

綜合起來就是

char a[10];

a[0]=97;

任何變數都需要地址,而'a'其實就是變數97,不是字串那樣的地址表示方式,他的地址是系統臨時分配,可以忽略。

18樓:seo自學部落格

我認為應該 是一個地址,等號右邊是一個陣列指標應該。然後把這個指標儲存在另一陣列的第11個元素中

關於c++動態記憶體分配 這樣寫會不會出什麼問題? char *a = new char []; a

19樓:匿名使用者

請在new char的時候就寫好申請內

存的大小new char[size], 編譯器並不會從後文或者執行時推斷需要多少記憶體

我沒查到不在裡寫上申請記憶體大小時編譯器會怎麼處理, 看上去應該會報錯才對, 能通過編譯的話我猜可能是當作0或者1或者某個預設值, 總之申請到的記憶體不一定能存得下從cin接收的字串

即使不填上要申請的記憶體大小也能正常執行可能只是char *a指向的那一塊記憶體剛好沒有被用到而已, 從cin輸入的字串足夠長的話多半就會報錯了

c語言中 char a='a',abc; 是什麼意思?

20樓:匿名使用者

定義了兩個char型別的變數: a和abc

其中變數a在定義的時候順便給它賦了初始值: 'a' (字元a)

21樓:郗斌丙翠柏

chara=

"abc";

中a是陣列名,編譯時為其分配4個char單元,前3個單元用「abc"中的字元對應初始化,最後一個存放'\0';char*p=

"cdef";在編譯時先生成"cdef"字串常量,存放在常量區,並將首地址(c的地址)賦給char

*型指標變數p。從以上可見,a是陣列,所以其中的元素abc都可變,可以重寫;而p指向的是常量,不可更改。

C語言問題C語言問題,C語言問題C語言問題

include include int main b k p b k 0 puts b return 0 c語言問題c語言問題 include int main int h,m scanf d d h,m printf s num h if m 0 else printf o clock print...

C語言問題,C語言問題C語言問題

這題考的是自動型別轉換,由編譯系統自動完成,轉換是 向上 靠的 舉個例子 include stdio.h void main 你編譯一下就會有警告 conversion from double to float possible loss of data 也就是說系統預設轉化了a,b的資料型別為do...

c語言問題,C語言問題

1 c2 a 3 d4 a 5 d6 b 7 a8 a9 d c語言問題 include define n 30 typedef struct student student r n int main void num 1 for i 0 ir max score max j if max i if...