指標變數能直接賦值嗎,可以對指標變數進行賦值嗎,例如 p

2022-02-26 23:29:25 字數 5611 閱讀 4906

1樓:

指標變數一般是不可以直接賦值的,因為直接賦值的話,就是讓這個指標指向這個賦值的地址,萬一這個地址是你計算機內部的某個程式的或者是系統的某個地址,而你對這個指標的值又改變了,那麼你的計算機系統就會出現問題,可能導致系統不能正常執行活著程式出錯等等。但是null是一個空地址,即0,它不指向任何地址,所以可以賦值為null

2樓:匿名使用者

p=null;是空指標 這個指標沒有任何用 但是是最安全的因為當一個指標不用以後 如果不把他指向0 他很可能與別的地址相同那樣就遭了 而指向0卻不會出現這種問題

int * p;

p=2000;這種有可能通過編譯 但是這是極其危險的做法 絕對不能這樣做

指標只能賦予相應的指標值 或者是0空指標

因此只能表示為

int * p;int a;

p=&a;

或者p=0;

3樓:龍芯

不能 , null代表空地址,是指沒有 不是0的意思;

4樓:

0地址特殊?否!這只是個習慣用法。

0 作為空值是有意義的,

因為通常變數的地址不會為0;

對intel86系列cpu來說這裡是中斷向量表,使用者**是不會改動它的。

其他系統只怕也會一樣的,因為c最早並不是用於dos,windows。

而是用來編寫unix作業系統的;並隨作業系統一起釋出的。

早期的unix並不是在intelcpu上實現的。

事實上0地址,是可以讀取的。當然如今作業系統可能會保護這段記憶體。

使用者態**只怕不能讀取了。

5樓:匿名使用者

可以的。 在pc上你設定一個指標等於2000跟設定它等於0實際上是一樣的

在c語言中能否直接給指標指向的資料賦值?為什麼?

6樓:大野瘦子

可以,但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;

7樓:匿名使用者

可以直接給指標指向的資料賦值。

因為*p操作是這樣一種運算,返回p的值作為地址的那個空間的取值。存放地址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的地址。

在使用一個指標時,一個程式既可以直接使用這個指標所儲存的記憶體地址,又可以使用這個地址裡儲存的函式的值。

8樓:

能,一定能。但你int *p;*p=7;這樣不行。為什麼呢?

因為「能直接給指標指向的資料」賦值,而你這裡的p還沒有指向,所以不能賦值;這種指標有個名字叫「懸浮指標」,俗稱野指標,是不能給它賦值的。這樣才可以:int a,*p=&a;*p=7;,實際上就是使a等於了7。

9樓:在臨潮湖吃中餐的淺藍暹石

不行,因為你只是宣告瞭一個int型的指標,代表執行某一塊記憶體,可是並沒有說明到底是那一塊記憶體, 所以後面的賦值也是沒有意義的,7只是個存放在靜態儲存區的字面值,是不能這麼賦值的。

10樓:匿名使用者

只有字元指標可以,他會自動生成記憶體來儲存

11樓:匿名使用者

指標要指向一個合法的地址才可以賦值

12樓:超級旅行者

*p沒有指向記憶體,要先申請記憶體,可以這樣

#include

int *p = (int *)malloc(sizeof(int));

*p = 7;

printf("%d",*p);

c語言中可以給指標變數賦值常數嗎?

13樓: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;

14樓:

c語言中可以給指標變數賦值常數,賦值方法為:

1、首先開啟microsoft visual c++軟體,單擊「檔案」選單->「新建」,新建一個檔案,檔名字尾為.c。

2、新建好檔案後,輸入如下內容。

3、然後我們在之間輸入函式的內容,我們先定義變數c1,變數的型別為char,字元型。

4、然後,我們用printf語句進行輸出。

5、當內容輸入好後,我們點選圖中工具按鈕,對程式進行檢測,如果沒有錯誤,會得到下圖所示效果(紅線畫出)。

6、檢測到沒有錯誤後,點選執行(紅色感嘆號),彈出的黑色視窗中為最終結果,可以看到大寫字母「a」顯示在上面。

15樓:匿名使用者

賦值當然可以啊,不能用地址引用

舉例://int

int * p = new int;

*p = c_int_1; //這個是可以的,賦值p= c_int_1; //這個不可以,地址複製了//字串

char * p;

p = "abc"; //字串這樣就可以,因為這個常量編譯器自動賦予了空間

16樓:今天沒有睡

不可以 因為這是不可預見的 如果指到了你記憶體中的重要訊息,電腦可能會出問題啊,所以千萬不要賦常數給指標變數

17樓:匿名使用者

準確地說,只能賦值0,其他的都不合法

18樓:匿名使用者

不能,變數怎麼能賦值呢,變數時變化的不是一定值

19樓:匿名使用者

只有字元指標可以,直接等於字串常量

20樓:匿名使用者

不可以 指標變數只能指向地址

21樓:情漫都市

一般不允許。很可能系統報錯

22樓:匿名使用者

指標時用來存放地址的!地址就是個常數啊!所以這樣是能編譯通過的!

但是,這樣執行會出錯(段錯誤)的!因為指標本來是存放地址的,而你卻存放了一個常數(即一個不合法的地址),這樣就會使指標指向不確定的記憶體單元(非法訪問),從而出現錯誤!

可以對指標變數進行賦值嗎,例如*p=1

23樓:匿名使用者

*p = 1,表示將1賦值給p 所指的變數或地址空間,在這步上面肯定有*p的初始化或已賦地址。不然你直接這樣寫肯定是錯的。

24樓:匿名使用者

c++中,*p=1等價於(*p)=1,這麼寫沒問題

c表示* (p=1),表示把地址0x00000001賦值給p,外面的這個「*」很寂寞,所以不能這麼寫.

j**a static 變數能 賦值嗎

25樓:育知同創教育

可以賦值的。static的主要作用是靜態成員,指該變數的例項在記憶體中之存放一次。賦值是可以隨便改的。

26樓:

可以。標記為final的才不可以賦值。

27樓:旅初彤

可以啊,這個沒有影響的吧

指標變數賦值方式

28樓:娛樂k代表

指標變數賦值有三種方式:int i1、i2以及i3。

1、nt *p1=&i1,*p2=i2; 用整形變數的地址給基型別為整形的指標變數賦值。

2、p1=&i3; 給指標變數賦予變數的地址。

3、p1=p2; 通過指標變數給指標變數賦值。

存放地址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的地址。

擴充套件資料:

指標變數賦值三種方式例項:

1、方式一:int i1

i=3;

*i_pointer=3;

2、方式二:int i2

int i,j;

int *pointer_1,*pointer_2;

pointer_1 = &i;

pointer_2 = &j;

3、方式三:int i3

#include

void main()

{   char *string = 「i love china!」;

printf(「%s\n」,string);

29樓:手機使用者

int i1,i2,i3;

(1)int *p1=&i1,*p2=i2; 用整形變數的地址給基型別為整形的指標變數賦值

(2)p1=&i3; 給指標變數賦予變數的地址;

(3) p1=p2; 通過指標變數給指標變數賦值;

30樓:匿名使用者

int *p,a=3,*q;

*q=3;

*p=a;

p=&a;

p=q;

C語言中可以給指標變數賦值常數嗎

1 申請了空間 在常量區 存放了字串 2 在字串尾加上了 0 3 返回地址,這裡就是返回的地址賦值給了p 字串常量 hello 出現在一個表示式中時,hello 表示式使用的值就是這些字元所儲存的地址 在常量區 而不是這些字元本身。所以,可以把字串賦值給指向字元的指標p,而不能把字串賦值給一個字元陣...

結構體變數如何賦值可以直接賦值嗎

結構體變數是可以直接賦值的 定義結構體型別,然後用這個型別定義出來的變數就是結構體變數 c語言在相同型別的變數間賦值時是直接記憶體複製的,即將他們的記憶體進行復制,這裡因為同樣結構體變數,屬於同一種變數,所以賦值時是按照他們的記憶體分佈來直接拷貝的。結構體的賦值僅僅是簡單的淺複製,如果涉及到指標型別...

C語言可以把指標和陣列名之間相互賦值嗎

不可以,陣列名字相當於一個const指標,不能再賦值了 不可以,c c 中 陣列名雖然形同一個指標 但是是常值 是不可以進行賦值操作的,同理 也不可以進行 操作,希望可以幫助到你 可以,不過上面的例子里長度會不同,編譯會出現警告 warning 不行,陣列名錶示的是陣列的首地址,是常量,常量是不能賦...