c語言中能不能將整數賦給指標變數

2021-08-26 05:13:04 字數 4917 閱讀 5202

1樓:匿名使用者

系統記憶體使用是作業系統規定的,如果你希望直接操作記憶體,就必須瞭解系統的記憶體的分配情況,否則造成的損失可能是致命的。你的舉例是不完整的,如果說*point_1=100是非法的,完整語句應該是int *point_1=100,之所以非法是因為100不是使用者可以操控的記憶體區域。*p = 1之所以數合法的,是因為將p所指的記憶體賦予整數1,例如int a;int *p = &a;*p = 1; // 等價於賦值語句a = 1,

2樓:匿名使用者

在某種場合,把常量賦給指標變數是可以的,例如:

int a=10, *p ;

printf("%d",&a);

在以上**輸出a的地址值之後,譬如:1244996以上程式可以改為:

int a=10,*p;

p=1244996;

printf("%d",*p);

輸出10

3樓:匿名使用者

*point_1=100; 將100賦值給point_1指向的地址。

4樓:匿名使用者

point-t 裡存放的是地址。。。

5樓:匿名使用者

初始化時不能,*p=1可以

在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);

為什麼不能將一個整數賦給一個指標變數?

13樓:99承情

因為指標變數所對應的是地址,而整數是存放在某個地址上的內容。二者不一樣。

對於指標變數如何程式:

int   _integer = 0;

為求地址運算子, 指標用來儲存一些變數的地址

可以這樣訪問(*_pinteger) 得到 _pinteger這個整形指標裡面的值0;

指標的基本概念 在計算機中,所有的資料都是存放在儲存器中的。 一般把儲存器中的一個位元組稱為一個記憶體單元, 不同的資料型別所佔用的記憶體單元數不等,如整型量佔2個單元,字元量佔1個單元等, 在第二章中已有詳細的介紹。為了正確地訪問這些記憶體單元, 必須為每個記憶體單元編上號。

其中,*表示這是一個指標變數,變數名即為定義的指標變數名,型別說明符表示本指標變數所指向的變數的資料型別。

14樓:儲紹言揚

指標變數所對應的是地址,而整數是存放在某個地址上的內容。兩個自然不能混為一談。

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

15樓:會飛的小兔子

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++這樣就是不合法的,即不能進行數**算,也不能使用*取值操作,想使用必須轉換為其它的型別。

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

17樓:匿名使用者

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

舉例://int

int * p = new int;

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

char * p;

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

18樓:今天沒有睡

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

19樓:匿名使用者

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

20樓:匿名使用者

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

21樓:匿名使用者

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

22樓:匿名使用者

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

23樓:情漫都市

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

24樓:匿名使用者

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

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

c語言中,能將k賦值給m,n的語句為什麼是mk

邏輯與是左結合的,所以程式從左往右執行的哦 嘿嘿 是左結合運算,所以 m k n m 都 n m m k 是正確的 複製運算子沒有 運算子優先順序高。所以 n m m k 相當於 n m m k 這個就是優先順序的問題了。前者先分別算括號裡的然後再把兩個結果做與預算,也就是說專這個運算的是倆個括屬號...

c語言程式設計能不能編個顯示是iloveyou的圖案艾高

1 用字串輸出i love you main printf s st2 2 用井號拼出來 include stdio.h main int loop,loop2,loop3,tmp for loop 0 loop 8 loop else else tmp 2 putchar n printf end...

能不能用c語言寫微控制器at89c51實現秒錶的設計,有pro

首先肯定能實現,用內部計數器就可以,可以幫助你 你好!是 實現效果嗎?還是用的開發板?求一份基於微控制器at89c51計算器的proteus 設計的c語言源程式 和 電路圖最好原創 你弄好了沒,我要答辯了還沒弄好 574942051 qq.com求一份兒,謝謝了,畢個業不容易啊 我有一個基於80c5...