當前位置:首頁 » 編程語言 » C語言不能對指針賦值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

C語言不能對指針賦值

發布時間: 2022-12-12 10:07:38

① 【c語言,為什麼類型不同的指針不能被賦值】

對於指針變數本身,所需的存儲空間不管是什麼類型的,都是一致的,區別在於它指向的變數的類型,不同的編譯系統對類型所需空間的大小也是不一樣的。例如有的int就是2個位元組,而有的就是4個位元組。
如果int是2個位元組,float是4個位元組,那麼將其地址放在指針變數以後,類型決定了通過指針變數來操作指向的數據,是從起始地址開始的順序幾個位元組中存取數據,如果是int型,那就是從地址開始的2個位元組中存取數據,如果是float型,那就是從地址開始的4個位元組中存取數據。這才是你提的問題的根本區別所在。

② C語言指針的賦值問題

指針在用要注意初始化,例如:

int *p;

p為指針,地址是未知的,如果直接賦值

*p=a;這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要數據,所以避免這種危險,在定義指針時注意初始化,也就是賦值。

可以int *p=&a;

或者int *p;

p=&a;

然後再對p進行操作

有錯。

注意大小寫,還有

int a=9;

int *p;

p=&a;//這個是指針指向a

*p=8;

這樣就對了。

(2)C語言不能對指針賦值擴展閱讀:

指針的賦值

int *p;

int a;

int b[1];

p = &a;

p = b;

指針的賦值,「=」的左操作數能夠是*p,也能夠是p。

當「=」的左操作數是*p時,改變的是p所指向的地址存放的數據;

當「=」的左操作數是p時,改變的是p所指向的地址。

數組的變數名b表示該數組的首地址,因此p=b;也是正確的

同類型的指針賦值:

int val1 = 18,val2 = 19;

int *p1,*p2;

p1 = &val1;

p2 = &val2;

p1 = p2; //注意啦,p1指向了val2,而沒有指向val1

備註:字元串與指針的初始化和賦值

初始化:

char *cp = "abcdefg"; //這個初始化過程,是將指針cp指向字元串的首地址,而並非傳遞字元串的值。由於,在C語言裡面,沒有總體處理一個字元串的機制

賦值:

cp = "abcdefg";

*cp=」abcdefg」 ;//錯誤!字元串常量傳遞的是它的首地址,不能夠通過*cp改動該字元串的值,由於該字元串為常量,而它僅僅是簡單的將指針指向該字元串常量。

③ 在C語言中能否直接給指針指向的數據賦值為什麼

可以直接給指針指向的數據賦值。

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

在使用一個指針時,一個程序既可以直接使用這個指針所儲存的內存地址,又可以使用這個地址里儲存的函數的值。

(3)C語言不能對指針賦值擴展閱讀:

兩個地方要注意:

1、在程序聲明變數的時候的*,只是表明「它是一個無符號整數,這個整數指向某個內存地址,一次訪問sizeof(type)長度」。這點不要和(*)操作符混淆;

2、在C++程序聲明變數的時候的&,只是表明「它是一個引用,這個引用聲明時不開辟新空間,它在內存分配表加入新的一行,該行內存地址等於和調用時傳入的對應參數內存地址」。

這點不要和(*)聲明符,(&)操作符混淆。

網路-指針

④ 在C語言中能否直接給指針指向的數據賦值為什麼

肯定能。
但你編寫的:int
*p;*p=7;這樣的程序不對。因為「能直接給指針指向的數據」賦值,而你編寫的小程序里的p還沒有指向,所以不能賦值;
這個指針叫「懸浮指針」,也叫野指針,它不能被賦值的。需要這樣編寫才可以:int
a,*p=&a;*p=7;

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

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

1、首先打開Microsoft Visual C++軟體,單擊「文件」菜單->「新建」,新建一個文件,文件名後綴為.c。

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

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

這樣:

char a[6]="hello";

a[2]='c';

就可以了。

這里你為hello分配了一個長度為6的字元數組空間來存放。

(6)C語言不能對指針賦值擴展閱讀:

給字元數組賦值的方法

1、定義的時候直接用字元串賦值

char a[10]="hello";

注意:不能先定義再給它賦值,如char a[10]; a[10]="hello";這樣是錯誤的!

2、對數組中字元逐個賦值

char a[10]={'h','e','l','l','o'};

3、利用strcpy

char a[10];

strcpy(a, "hello");