當前位置:首頁 » 編程語言 » c語言地址口賦值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言地址口賦值

發布時間: 2022-07-27 17:16:56

c語言常量區的地址賦值

這個情況比較多,不過一般說以下兩種情況下的常量是有地址的:
1、如果是以const關鍵字修飾變數而產生的「不可變變數」的話,是有地址的,如const int a = 0。
但是嚴格來說const修飾只是產生了不可變變數,並不是嚴格意義上的常量。
2、字元串常量,例如 char *a = "abc";那麼字元串「abc」就是一個字面值字元串,這是一個常量,其地址就是這個字元串第一個字元所在的地址。

再有像是字面值數字 "int a = 5"里邊的5,是沒有地址的。
表達式本身作為代碼,並不擁有地址。但是用來組成表達式的變數或常量是可以擁有地址的。
獲取一個常量或變數的地址可以用「&」取址符,例如:
const int b = 0;
const int * pb = &b;
那麼pb里邊就是b的地址了。

② C語言 將地址賦值給指針變數

取決於p的類型。
struct stu_type *p=&stu1;
這里的*是和類型一起的,用來定義,而非初始化。 等效於
struct stu_type *p;
p=&stu1;
至於去掉, 如果寫成struct stu_type p=&stu1;絕對會報錯。 不存在你說的去掉和加上結果不變。

③ 關於C語言中給絕對地址的賦值問題

您說的應該是對的,用VC的話前面那條語句是編譯不通過的。

補充啊,談點個人看法:
雖然在VC上面編譯不能通過(unsigned int *)0x100000 = 0x3322語句,但是個人認為這條語句與*((unsigned int *)0x100000) = 0x3322所表達的含義是不同的。前者是對指針賦值,後者是對指針所指向的對象賦值。
1. 從變數的定義出發,變數是地址空間的別名,也即例如unsigned int *a表示給一個存儲空間命名為a同時這個空間是一個地址指針,假設這個存儲空間的地址為0x100000,那麼此時a即是地址0x100000單元的別名,對a賦值即是對0x100000所標識的空間賦值。因此(unsigned int *)0x100000 = 0x3322賦值的空間是0x100000。
2. 對於*((unsigned int *)0x100000) = 0x3322語句,也即相當於*a = 0x3322,也即是a所指向的空間被賦值。也即是先取出0x100000地址空間的值作為地址找到對應的存儲空間然後存儲0x3322。

個人的一點淺見,不知道是否符合真實情況。

④ 在c語言中給一個變數賦值與賦地址的區別

1、傳遞的變數值不同

兩者其實傳遞的都是一個內存單元的內容。不同的是,值傳遞的內容是一個變數的值,得到這個值後,對這個值得修改不能改變原變數的值;而地址傳遞的是一個變數的地址,得到傳遞的地址值後,可以通過這個地址直接訪問地址對應的那個變數,進而修改那個變數的值。

2、傳遞的途徑不同

值傳遞只是將變數的內容復制一份而已,函數進行操作的其實是另一個變數,只是另一個變數的值和傳遞的變。賦地址相當於間接操作就相當於知道了這間房子的具體位置去找裡面的主人而賦值是直接去根據主人名字去找它。

3、傳遞的函數不同

賦地址inta=10,b;給變數賦值就是b=a;但是賦地址就不行因為地址只能賦給指針變數應在上面基礎上加char*p;把a的地址給p就是p=&a;地址只能存在指針變數中變數賦值,是可以給變數賦一個相同類型的任意的數據,而變數的地址是系統在內存隨機分配的,不能更改。並且只有指針變數才能賦地址值。

給變數賦地址這個變數要為指針變數int*p,b;*p=&b;給變數賦值只要類型相同就行。其實都是一樣,都是給一個數據,地址也是一個數值而已給變數賦值是復制一個數如:inta=1b;b=a;則變數b被賦值為a的值,但是賦地址得用指針,因為指針的定義就是地址的意思。

⑤ C語言 地址賦值問題

匯編語言就可以這樣,但是C不是匯編,需要類型轉換,下面的程序調試通過,結果正確,但是有一個警告:

main(){
int a = 10, b;
unsigned int addr = &a;
b = *((int *)addr);
printf("%d\n",b);
}

⑥ keil51中如何用C語言定義寄存器的地址並給地址賦值

KeilC51中定義寄存器變數的方法如下:

1、特殊功能寄存器的定義:
sfr和sfr16,比如:
sfr P1=0x90;

sfr16 T2=0xcc;
2、普通寄存器變數定義:
使用DBYTE和XBYTE來實現,比如
unsigned char temp=XBYTE[0x1000];//這是訪問外部地址的語句,也可以是外部IO口地址
unsigned char temp=DBYTE[0x40];//這是將內部寄存器40H定義為變數temp

⑦ C語言 多級指針 指針變數賦地址值的方式

**p就是一個雙重指針啊,意思就是說這個指針變數裡面放的是一個指針的地址(一般的指針變數裡面放的是一個變數的地址),這么說不知道你明不明白。
通過指針變數獲得地址值:
int
**p;//雙重指針
int
*q;//普通指針
p=&q;//將指針q的地址賦值給p
通過標准函數獲得地址值:
int
**p;
p=(int*)malloc(n*sizeof(int*));//動態創建n個int類型的指針變數空間
其實說白了雙重指針就是二維數組的頭指針,數組的每一行的開頭就是那一行所代表的一維數組的指針,二維數組頭指針就是每一行的頭指針的地址數組。

我自己都覺得指針這個東西好繞。。。。不過多用就明白了。

⑧ 地址可以賦值給地址嗎C語言

可以的
指針類型 就是做這個的

而且 不管是什麼樣的地址 在C語言中 都是一個整型值
所以 地址賦值給整型變數都是可以的。