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

c語言只能用指針接收地址

發布時間: 2023-03-08 03:46:47

c語言中指針變數只能存儲地址

存放地址的變數稱為指針變數。指針變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是數據本身,而指針變數存放的是數據的地址。
假設在程序中聲明了1個int型的變數a,其值為68。系統為變數a分配的首地址為0X65FDF4H,pa是存放變數a地址的指針變數,即pa中存放的值為0x065FDF4H。
對變數a的訪問有兩種方式:一是直接按地址0x065FDF4H找到a的存儲單元,從而對變數a進行訪問;二是按系統為pa分配的地址先找到pa,然後根據pa的值(即變數a地址0x065FDF4H)找到變數a在內存中的存儲單元,從而對變數a進行訪問。對於前一種訪問方式稱為直接訪問方式,後一種訪問方式稱為間接訪問方式。
如果一個指針變數存放的是某個對象的地址,則稱這個指針變數指向該對象。在C++程序設計中,指針變數只有確定了指向才有意義。
1. 定義指針變數的一般形式如下:
類型名*指針變數名1,*指針變數名2,... *指針變數名n ;
2. 空指針
空指針是一個特殊的指針,它的值是0,C語言中用符號常量NULL(在stdio.h中定義)表示這個空值,並保證這個值不會是任何變數的地址。空指針對任何指針類型賦值都是合法的。一個指針變數具有空指針值表示當前它沒有指向任何有意義的東西。
3. void指針
(void *)類型的指針叫通用指針,可以指向任何的變數,C語言允許直接把任何變數的地址作為指針賦給通用指針。但是有一點需要注意void*不能指向由const修飾的變數,eg const int test; void * ptv; ptv = &test;第三句是非法的,只有將ptv申明為const void * ptv;上述第三句(ptv = &test),才是合法的.
當需要使用通用指針所指的數據參加運算時,需要寫出類型強制轉換。如通用指針ptv 所指空間的數據是整型數據,p是整型指針,用此式轉換:p=(int *)ptv ;

Ⅱ 在c語言中,指針作為函數參數,形參只能傳遞值,而不能傳遞地址,是怎麼回事

建議上代碼
問題中說法本來就是錯的
形參指的是你聲明或者定義用的那個參數,本來也不是傳值的
至於傳值還是傳地址,如果形參是指針p,那麼傳遞過去的p值就是地址,同時也是自身的值,這個看具體使用情況
所以一句話,show me your code

Ⅲ C語言中指針變數只能存儲地址

指針變數是一個變數,它保存的是另一個變數的內存地址。你如果知道了這個指針變數保存的值,就可以知道它所指向變數的內存地址,於是就可以間接訪問到那一個變數。
定義:指針變數類型
*指針變數名1,
*指針變數名2,
...
;
例如:
int
main(void)
{
int
*p;
/*定義*/
int
a;
p
=
&a;
/*把a的地址賦值到p中*/
*p
=
1;
/*間接訪問a*/
return
0;
}
把指針作為函數的參數傳遞,可以使函數可以訪問函數外部的變數,例如:
void
swap(int
*a,
int
*b)
{
int
c;
c
=
*a;
*a
=
*b,
*b
=
c;
}
指針也可以用於傳遞數組,數組名本身就是一個指針:
void
func(int
a[],
int
n)
{
.....
}
指針還可以指向指針,指向結構體(struct),指向數組
int
**p;
/*指向int指針*/
struct
xxx
*p;
int
(*p)[100];
/*指向一個int[100]數組,括弧不可少*/

Ⅳ 為什麼C語言能直接訪問物理地址而其他高級語言不行

C語言有指針,可以直接訪問內存地址,其他高級語言都沒有指針的概念,用引用的概念代替了。因為指針的使用不安全,容易出錯,內存泄漏等等。
但是C語言C++ 有指針,所以更快,更高效。其他高級語言沒有C更快,但是更簡單,更安全。