1樓:大野瘦子
可以,但int *p;*p=7;這樣不行。
因為「能直接給指標指向的資料」賦值,而這裡的p還沒有指向,所以不能賦值,這種指標有個名字叫「懸浮指標」,是不能給它賦值的。
這樣才可以:
int a,*p=&a;*p=7;
實際上就是使a等於了7。
注意事項
也可以使用賦值運算子為指標變數賦值,但要保證兩個指標變數的型別相同。
假設有如下變數定義:
int i,j,*p,*q;p=&i;q=&j;
這兩句將變數i和j的地址分別賦值給指標變數p和q;
執行了q=p後,執行該條語句,指標變數p和q都指向了同一個變數i,因此指標變數p和q中存放的都是變數i的地址&i。變數i此時並沒有初始化,只為其分配了記憶體單元。
注意理解:q=p;和*q=*p
前者為指標變數q賦值,即將指標變數p中存放的某個變數的地址賦值給q。顯然,賦值後,q和p就指向了同一個變數。
後者將p指向變數的賦值給q指向的變數。
例子:p=&i;
q=&j;
i=2;
j=3;
2樓:匿名使用者
可以直接給指標指向的資料賦值。
因為*p操作是這樣一種運算,返回p的值作為地址的那個空間的取值。存放地址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的地址。
在使用一個指標時,一個程式既可以直接使用這個指標所儲存的記憶體地址,又可以使用這個地址裡儲存的函式的值。
3樓:
能,一定能。但你int *p;*p=7;這樣不行。為什麼呢?
因為「能直接給指標指向的資料」賦值,而你這裡的p還沒有指向,所以不能賦值;這種指標有個名字叫「懸浮指標」,俗稱野指標,是不能給它賦值的。這樣才可以:int a,*p=&a;*p=7;,實際上就是使a等於了7。
4樓:在臨潮湖吃中餐的淺藍暹石
不行,因為你只是宣告瞭一個int型的指標,代表執行某一塊記憶體,可是並沒有說明到底是那一塊記憶體, 所以後面的賦值也是沒有意義的,7只是個存放在靜態儲存區的字面值,是不能這麼賦值的。
5樓:匿名使用者
只有字元指標可以,他會自動生成記憶體來儲存
6樓:匿名使用者
指標要指向一個合法的地址才可以賦值
7樓:超級旅行者
*p沒有指向記憶體,要先申請記憶體,可以這樣
#include
int *p = (int *)malloc(sizeof(int));
*p = 7;
printf("%d",*p);
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樓:匿名使用者
c語言bai中,凡是以""括住的形式直du接出現,而且你zhi又沒有為其分配內dao
存空間的字
符串專都是常量字串,是屬不能修改其值的。
char a[6]="hello";
a[2]='c';
就可以了。這裡你為hello分配了一個長度為6的字元陣列空間來存放。
13樓:匿名使用者
char *a="hello";
''hello''是常量,所以a指向的是常量區,不能對於常量區的元素進行賦值
14樓:匿名使用者
char *a="hello";這個形式的定義是屬於字串常量,不可以修改的.
15樓:匿名使用者
不能修改!
char *p="hello";
相當於 const char *p="hello"
以這種方法初始化的字串是常量字串,而系統預設對常量賦初值後,其值無法被修改,否則會報錯,所以不能修改。
c語言中可以給指標變數賦值常數嗎?
16樓:會飛的小兔子
1、申請了空間(在常量區),存放了字串
2、在字串尾加上了'/0'
3、返回地址,這裡就是返回的地址賦值給了p
字串常量"hello"出現在一個表示式中時,"hello"表示式使用的值就是這些字元所儲存的地址(在常量區),而不是這些字元本身。所以,可以把字串賦值給指向字元的指標p,而不能把字串賦值給一個字元陣列。
chara[10]=「hello」;//這樣可以,這種情況是c語言初始化所支援的,如果寫成chara[10],然後a=「hello」這樣就錯誤了。同樣是a陣列,chara[10]=「hello」;這種是陣列的初始化,和a[0]=『h』a[1]=『e』,是一個道理。
換成chara[10],然後a=「hello」就不行了「hello」賦值的值是一個地址,而a雖然也有地址,但是這與指標是不一樣的,指標的值是地址,而陣列的值雖然也是地址,但是卻是一個常量,所以不能給常量賦值。
擴充套件資料
c語言中給指標變數賦值常數注意事項
在使用指標的時候,指標可以自增,而陣列不能自增,編譯器給陣列分配了空間,陣列a的地址就是一個常量了,讓常量自增這肯定是不行的。 在指標自增的時候,編譯器會自動識別型別,比如指標是指向int型的,想獲取下一個的地址時,指標直接p++就行了。
特別需要注意的是,在void指標使用的時候,不能使用指標運算,應為void型編譯器不能識別型別的長度(即指標所指物件的體積),p++這樣就是不合法的,即不能進行數**算,也不能使用*取值操作,想使用必須轉換為其它的型別。
17樓:a羅網天下
如:char *p,a='5';
p=&a;
p="abcd";
解析:p申請了空間(在常量區),存放了字串,所以最後可以返回地址。
以字串形式出現的,編譯器都會為該字串自動新增一個0作為結束符,如在**中寫
"abcd",那麼編譯器幫你儲存的是"abcd\0"。
1、定義指標變數的一般形式如下:
型別名*指標變數名1,*指標變數名2,... *指標變數名n ;
2、空指標
空指標是一個特殊的指標,它的值是0,c語言中用符號常量null(在stdio.h中定義)表示這個空值,並保證這個值不會是任何變數的地址。空指標對任何指標型別賦值都是合法的。
一個指標變數具有空指標值表示當前它沒有指向任何有意義的東西。
3、void指標
(void *)型別的指標叫通用指標,可以指向任何的變數,c語言允許直接把任何變數的地址作為指標賦給通用指標。
但是需要注意void*不能指向由const修飾的變數,例如第三句是非法的,只有將ptv宣告為const void * ptv;,上述第三句ptv = &test才是合法的。
當需要使用通用指標所指的資料參加運算時,需要寫出型別強制轉換。如通用指標ptv 所指空間的資料是整型資料,p是整型指標,用此式轉換:p=(int *)ptv;
18樓:匿名使用者
賦值當然可以啊,不能用地址引用
舉例://int
int * p = new int;
*p = c_int_1; //這個是可以的,賦值p= c_int_1; //這個不可以,地址複製了//字串
char * p;
p = "abc"; //字串這樣就可以,因為這個常量編譯器自動賦予了空間
19樓:今天沒有睡
不可以 因為這是不可預見的 如果指到了你記憶體中的重要訊息,電腦可能會出問題啊,所以千萬不要賦常數給指標變數
20樓:匿名使用者
準確地說,只能賦值0,其他的都不合法
21樓:匿名使用者
不能,變數怎麼能賦值呢,變數時變化的不是一定值
22樓:匿名使用者
只有字元指標可以,直接等於字串常量
23樓:匿名使用者
不可以 指標變數只能指向地址
24樓:情漫都市
一般不允許。很可能系統報錯
25樓:匿名使用者
指標時用來存放地址的!地址就是個常數啊!所以這樣是能編譯通過的!
但是,這樣執行會出錯(段錯誤)的!因為指標本來是存放地址的,而你卻存放了一個常數(即一個不合法的地址),這樣就會使指標指向不確定的記憶體單元(非法訪問),從而出現錯誤!
c語言中,為什麼字串可以賦值給字元指標變數
26樓:匿名使用者
在c語言中並沒有bai
字串這個型別
du。所說的字zhi符串就是字元dao陣列。也就是char型別版的陣列。
與普通陣列不同的,權字串必須以'\0'作為結束符。
而在c語言中,型別為t的一維陣列,其首地址等效於該型別的一維指標,即t*型。
於是字串,也就是字元陣列,首地址就可以當做char *型使用了。
事實上,在庫函式以及大多數使用到字串作為引數的函式中,其引數都是char *型的。
27樓:路圖元
p="abcd"; //這句話的意思是把字串的首地址賦給p!
28樓:匿名使用者
單引號和雙引號,賦值的時候這個應該有講究吧!具體忘了,幾年沒去看了。
29樓:土杜土杜
p = "abcd"; 編譯器會將字串"abcd"的地址放到指標變數p中。p存放的是它的地址,不是值。
30樓:棄嬰
字串常量賦值給指標變數應該就是把它的首地址賦給指標變數吧 。
31樓:五轉故劍情深
1. 'a'是字元
常量,bai"a"是字元字面量,一個du加zhi單引號一個加雙引號,是兩個不dao同的東西不要版搞混了
2.1 字元常量'a'使用整數(字符集
權的數值碼)表示,最常用的字符集是ascii碼,在ascii碼中,字元'a'的值為97,這也是為什麼字元可以作加減法運算和比較
2.2 字串字面量"a",在c語言中作為陣列來處理,既然如此,編譯器就會把它看作是char *型別的指標。題幹中p = "abcd"其實是將"abcd"首個字母的地址賦值給了字元指標變數p,或者說p指向了字串字面量"abcd"的第一個字元
2.2.1 c語言編譯器處理長度為n的字串字面量時,會為其分配長度為n+1的記憶體空間,第n+1個位置存放額外追加的空字元(字串結束的標誌)
C語言中的空指標,C語言中的空指標是什麼意思?
int p 47 這個用法是不正確的 這個語句等於下邊的 int p p 47 你直接將指標p的值賦值為47是很危險的 應為如果記憶體中地址為47的地方剛好是某個系統程式或關鍵模組佔據的話你進行下面 p 20 的賦值行為 有可能導致系統直接崩潰哦 是的,不過這很危險。而且cpu的32位保護機制也未必...
C語言中的指標問題
你這個swap無法完成交換的功能。因為指標包含某種資料型別的地址。你函式中的p p1,表示p指向p1所指向的資料。現在p和p1都指向一個資料 1 p1 p2之後p1和p2指向一個資料 2 p仍然指向資料 1 p2 p之後p和p2指向一個資料 1 p1仍然指向資料 2 你這樣做只是把指標的指向換來換去...
c語言中可不可以直接在函式首部直接給引數賦值
不明白你的意思 是不是類似於這樣 int hello char a,int i 4,int m 9 這樣在c語言中是不可以的,這是c 的概念,預設引數,使用方法如下 以上面的hello函式為例 hello n 預設i 4,m 9。hello n,5,23 這裡在函式中i 5,m 23.就是說,如果呼...