C語言字元指標變數的乙個問題

2025-02-02 04:50:19 字數 3356 閱讀 7159

1樓:網友

第一,char b[3] =char *q = b; 不能寫成 char *q =

ha"} 是陣列宣告才能用,直接賦給指標是不行的。要改為 char *q = ha";

第二,char *q = ha" 這樣的宣告,定義的是靜態字串指標,不能修改。

所以 *b = a 的時候就會出錯了。因為要修改,所以要先宣告乙個陣列 b[3] =再q = b。

而因為 a 只是讀取值不修改,所以可以用直接宣告 char *a = ha" 這樣的形式。

2樓:

#include

#include

main()

void i(char *a,char *b);

char a=ha",b=wa";

char *p=a,*q=b;

i(p,q);

printf("%s",q);

void i(char *a,char *b)for(;*a!='0';a++,b++)b=*a;b='\0';

定義指標並沒有分配記憶體,指標要指向已知的記憶體單元,否則就會出錯。

3樓:演奏師

函式i中 *b=*a 複製時出現異常 指標不能像陣列那樣賦值。

c語言函式名就是乙個指標變數嗎?

4樓:網友

是的。c語言中, 函式名也稱為函式的指標,所以c語言中函式名就是乙個指標。

函式指標」本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。

如前所述,c在編譯時,每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後。

可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是大體一致的。函式指標有兩個用途:呼叫函式和做函式的引數。

c語言中「指標」和「指標變數」的區別是什麼??

5樓:信必鑫服務平臺

1、概念不同。

指標」是概念,「指標變數」是具體實現,指標也是乙個變數,所以需要進行定義,而對於指標的定義,與一般變數一樣。

2、 存放位址不同。

乙個變數的(記憶體)位址稱為該變數的「指標」,通過指標能找到以它為位址的記憶體單元。而指標變數是用來存放另乙個變數的位址的(即指標)。

指標和指標變數的關係。

1、指標就是位址,位址就是指標。

2、位址就是記憶體單元的編號。

3、指標變數就是存放記憶體位址的變數。

4、指標和指標變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指標變數簡稱為指標,實際他們含義並不一樣。

指標的好處:

1、直接訪問硬體。

2、快速傳遞資料(指標表示位址)

3、返回乙個以上的值返回乙個(陣列或者結構體的指標)4、表示複雜的資料結構(結構體)

5、方便處理字串。

6、指標有助於理解物件導向。

c語言怎麼讓指標指向某個變數

6樓:網友

首先要知道兩個最基礎的知識點:

1、&a指向的是a的位址。

2、指標指向的是位址,和整型變數的值並不對等,也就是int *與int不對等,是不能從int轉換為int *的。

知道以上兩個最基礎的知識點,你的問題就很簡單了 。

第乙個:int *p;

p=&a;是正確的。定義指標變數p,然後才將p指向變數a的位址。

第二個:int *p;

p=int* (a);

p是指標,指向的是位址,而不是int型值,因此是錯誤的。

第三個:int *p=a;

不能從int轉換為int *,因此是錯誤的。

只有第乙個是正確的,後面兩個都是錯誤的。

7樓:章氏不錯

int *p;表示宣告乙個放int位址的變數,叫p

a,直接解釋就是乙個int變數的值。是位址裡的數值。

所以我選p=&a;

c語言中,為什麼不能對字元指標變數指向的字串再賦值?

8樓:大野瘦子

因為抄c語言中,凡是以""括住的形式直接出襲現,而且你又沒有為其分配記憶體空間的字串都是常量字串,是不能修改其值的。

這樣:char a[6]="hello";

a[2]='c';

就可以了。這裡你為hello分配了乙個長度為6的字元陣列空間來存放。

9樓:種令芮德曜

char*

a=為什麼不能修改,這個要涉及程序佔用的記憶體分段,大概分為**區,唯讀。

區,全域性區專,堆屬區,棧區。"hello"作為乙個字串字面值,是被放在唯讀區,唯讀顧名思義就是不能修改的。char*

a="hello",相當於把hello的位址賦給了a,故而不能對a指向的內容進行修改。char

a="hello",這樣賦值的就是乙個字元陣列。字元陣列a是在棧區裡申請的乙個空間給a,然後把唯讀區的"hello"進行了一次複製再賦值給a,這樣a的指向是能修改的。

10樓:網友

c primer plus 一書中寫到:「內容」為字串面量,其被視為常量,故無法再進行修改。只能對其指標的值(改變位置)進行修改,不能改變其內容。

11樓:

這不是絕對的:

bai當指du

針指向的字串是zhi常字串時當然不能再賦dao值,因為目標是「常量專」,而當指標。

屬指向的字串不是常字串時就可以再賦值,比如用動態申請記憶體方法建立的字串。具體說就是用char *p="abcqer12345";這種方法定義字串是不能通過指標改變內容的,原因是這個定義確定了abcqer12345是字串常量——因為char *p="abcqer12345";被編譯器解釋為「建立乙個字串常量abcqer12345,並把它的首位址(就是a的位址)賦給char *型指標p」——既然是「常量」,自然就不能更改。

12樓:匿名使用者

char *a="hello";

hello''是常量,所以a指向的是常量區,不能對於常量區的元素進行賦值。

13樓:網友

char *a="hello";這個形式的定義是屬於字串常量,不可以修改的.

14樓:網友

不能修改!

char *p="hello";

相當於 const char *p="hello"

以這種方法初始化的字串是常量字串,而系統預設對常量賦初值後,其值無法被修改,否則會報錯,所以不能修改。

c語言字元指標變數,C語言裡為什麼字元指標變數指向的字串常量中的內容是不可取代的?

對於printf這個函式,有著一系列的格式符號 比如你說的 d s不同的格式,有著不同的引數型別要求 比如 s 要求對應引數必須是char 型的 你例子中的string就是這一型別 所以不會出錯 如果換成printf s string string為char 型,對應的格式是 c 而 d對應的是整型...

c指標變數的問題,C語言指標變數大小的問題

p 1,是把1賦值給p所指向的物件,而p 1是把1賦值給p,這個1是被當做位址的。p 1和p 1是不同的概念,p 1 是賦值語句,還有在c語言中 1 0 是作為真假來用的,就相當於布林型數一樣。這兩個語句都是合法的。區別就是指標 的意思是取位址的意思。p是乙個指標,他的值是記憶體中一塊記憶體的位址,...

c語言中字元陣列和字元指標的問題

在函式內 char陣列被定義成局 部變數,函式執行後會被系統給釋放掉。但char p 則是定義成乙個常量,程式執行完後才會釋放掉。所以在返回char p 時會返回亂碼,但 char p 則可以全部顯示出來 當然 char 也可以定義成靜態變數 這樣就可以顯示出來了不如static char p he...