Ⅰ c語言中指針和引用的區別
指針,全稱為指針變數,是用來存儲內存地址的一種變數。程序中,一般通過指針來訪問其指向的內存地址中的內容(數據)。
引用,是C++中提出來的一種新的使用變數的方式,即,給實際變數起個別名,通過這個別名來引用實際的變數。標准C中不支持變數的引用。
這兩個概念沒有任何相關性。
指針是實實在在的變數,有自己的內存存儲空間,它可以指向任何有效的變數。
引用是一種形式、方法,定義的引用變數,實際上是原實際變數的另一個名稱(別名),引用變數本身沒有自己的實際存儲空間,操作引用變數,就是在操作實際變數。
如:
Ⅱ C語言中對指針變數的直接和間接引用怎麼區別
引用相比於於指針各有優點:一、引用變數它不能改變自身所引用的地址空間,而指針變數可以,那麼就很可能出現一些因為不小心的修改而導致錯誤的結果。二、在作為函數參數方面,引用作為參數,你調用的時候不需要對變數取地址值,這樣看起來比較直觀,而且方便,如果是指針變數作為參數,那麼你有時候會不明白這個函數到底是對指針進行運算,還是對指針指向的變數空間進行運算,而且還要取地址操作。三、不過有時候指針還是比引用好用的多,不如你需要快捷修改指向位置,那麼指針是很快的,有時候你就是要對地址(就是直接對內存)操作,那麼指針是首選啦。 下面是一個例子希望對你有用: //PointAndRef.cpp#include<iostream.h> //cout<< void pointFun(int *a,int *b) //指針作為參數{
int temp;
temp=*a;
*a = *b;
*b=temp;
}void refFun(int &a,int &b) //引用作為參數
{
int temp;
temp=a;
a=b;
b=temp;
}
void main()
{
int a,b;
a=1,b=2;
pointFun(&a,&b); //指針調用需要取地址值。
cout<<"a="<<a<<"b="<<b<<endl;
int c,d;
c=3,d=4;
refFun(c,d); //引用調用和正常變數調用一樣。
cout<<"c="<<c<<"d="<<d<<endl;
}
Ⅲ C語言指針變數的賦值和做函數的參數
1、指針變數的賦值,分為定義時賦值(初始化)和單獨賦值,如:
int x ;
int * px=&x ; //定義時賦值,也稱初始化,注意這里的*是跟隨int的,即變數px是int *類型變數! 實際上的賦值語句是px=&x ;
int * py ;
py=&x ; //單獨賦值,將py指向x
*py=10 ; //這里的*,是引用指針中的數據操作符,*跟隨的變數必須是指針類型變數,否則會出錯! *py就是x,這里相當於x=10;
2、指針變數作為函數的參數時,子函數可以通過指針引用實參地址中的數據,達到修改實參地址中的數據。如:
#include <stdio.h>
void func( int a, int b, int *pmax )
{
if ( a>b ) *pmax=a;
else *pmax=b ;
}
void main()
{
int a=2,b=3,max=0;
func(a,b,&max ); //這里將變數max的地址傳遞到子函數,子函數中通過該地址,可以修改max的值,達到子函數結束後,max能帶回運算結果的效果。
printf("max=%d\n", max );
}
Ⅳ C語言指針/引用/取值
指針是一個存儲計算機內存地址的變數。從指針指向的內存讀取數據稱作指針的取值。指針可以指向某些具體類型的變數地址,例如int、long和double。指針也可以是void類型、NULL指針和未初始化指針。
根據出現的位置不同,操作符 * 既可以用來聲明一個指針變數,也可以用作指針的取值。當用在聲明一個變數時,*表示這里聲明了一個指針。其它情況用到*表示指針的取值。
&是地址操作符,用來引用一個內存地址。通過在變數名字前使用&操作符,我們可以得到該變數的內存地址。
// 聲明一個int指針
int*ptr;
// 聲明一個int值
int val = 1;
// 為指針分配一個int值的引用
ptr = &val;
// 對指針進行取值,列印存儲在指針地址中的內容
int deref = *ptr;
printf("%d\n", deref);
第2行,我們通過*操作符聲明了一個int指針。接著我們聲明了一個int變數並賦值為1。然後我們用int變數的地址初始化我們的int指針。接下來對int指針取值,用變數的內存地址初始化int指針。最終,我們列印輸出變數值,內容為1。
第6行的&val是一個引用。在val變數聲明並初始化內存之後,通過在變數名之前使用地址操作符&我們可以直接引用變數的內存地址。
第8行,我們再一次使用*操作符來對該指針取值,可直接獲得指針指向的內存地址中的數據。由於指針聲明的類型是int,所以取到的值是指針指向的內存地址存儲的int值。
說穿了,指針就是地址吧,這里可以把指針、引用和值的關系類比為信封、郵箱地址和房子。一個指針就好像是一個信封,我們可以在上面填寫郵寄地址。一個引用(地址)就像是一個郵件地址,它是實際的地址。取值就像是地址對應的房子。我們可以把信封上的地址擦掉,寫上另外一個我們想要的地址,但這個行為對房子沒有任何影響。
Ⅳ C語言中「指針」和「指針變數」的區別是什麼
1、概念不同
「指針」是概念,「指針變數」是具體實現,指針也是一個變數,所以需要進行定義,而對於指針的定義,與一般變數一樣。
2、 存放地址不同
一個變數的(內存)地址稱為該變數的「指針」,通過指針能找到以它為地址的內存單元。而指針變數是用來存放另一個變數的地址的(即指針)。
(5)c語言引用型指針變數擴展閱讀:
指針和指針變數的關系
1、指針就是地址,地址就是指針。
2、地址就是內存單元的編號。
3、指針變數就是存放內存地址的變數。
4、指針和指針變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指針變數簡稱為指針,實際他們含義並不一樣。
註:
指針里存的是100. 指針:地址 - 具體。
指針里存的是地址,指針:指針變數 -可變。
指針的好處:
1、直接訪問硬體
2、快速傳遞數據(指針表示地址)
3、返回一個以上的值返回一個(數組或者結構體的指針)
4、表示復雜的數據結構(結構體)
5、方便處理字元串
6、指針有助於理解面向對象