Ⅰ c語言中引用及指針和引用的聯系與區別
C語言中引用和指針的用法很相似,在做函數參數時都是傳遞變數的地址,而不是傳遞一個變數的副本,都可以返回對參數變數的修改。主要區別在於參數的傳遞形式上。
指針的形式類似於 : int *pInt;
引用的形式類似於 : int &pInt;
Ⅱ C語言的指針用法和C++有什麼區別
使用的方法是一樣的,因為指針其實就是一個地址,不論面向對象和面向過程,地址這個概念是一樣的。C++因為有對象的概念,所以也有了指向對象的指針,比如:
Class
A{
};
A
a;
A
*P=&a;
就表示指針P是指向對象a的指針
Ⅲ C語言中,指針函數和函數指針有什麼區別
在C語言中指針函數和函數指針是兩個不同的概念,不能混淆。
指針函數本質上是函數,是一個返回類型為指針的函數,如:
int* max(int *array,int n)
{
//找最大值的地址
return 最大值的地址;
}
max就是一個指針函數。
而函數指針本質上是指針,是指向函數的指針,如:
int (*funp)(int a,int b);
funp就是一個函數指針,可以用它指向一個返回類型為int、有兩個int類型的參數的函數。
Ⅳ C語言中:鏈表中的指針與指針域的區別
這是兩個不同的概念。
1 指針是C語言中的一個數據類型。在鏈表的節點中,可能包含多個指針。
2 指針域是指的鏈表中用來指向相關節點的指針,一般是下一個,對於雙向鏈表,也包括指向上一個的指針。
3 對於鏈表節點,可以分為數據域和指針域兩部分。數據域中可能包含有指針類型。指針域中必然是指針類型。
Ⅳ c語言中數組和指針的區別與聯系
數組是用指針方式實現的,但數組值是一個常量,即不能改變數組的首地址,而指針是一個變數,可以改變它的值;如:數組 a和指針p,p=a+1;是合法的,但a=a+1;是不合法的。
Ⅵ c語言中的數組和指針的區別
C語言中,數組的名稱等價於數組的首地址,
當然可以利用指針開辟動態空間,使用方式與數組在形式上相同的,
但是他們有一個本質的區別,數組名相當於一個地址常數,而指針是一個以地址為內容的變數。
指針與數組的關系可以參考下面的網頁:
http://..com/question/341950481.html
Ⅶ C語言中,指針型函數和函數型指針的區別
1 函數指針變數
在C語言中,一個函數總是佔用一段連續的內存區,而函數名就是該函數所佔內存區的首地址。我們可以把函數的這個首地址(或稱入口地址)賦予一個指針變數,使該指針變數指向該函數。然後通過指針變數就可以找到並調用這個函數。我們把這種指向函數的指針變數稱為「函數指針變數」。
函數指針變數定義的一般形式為:
類型說明符 (*指針變數名)();
其中「類型說明符」表示被指函數的返回值的類型。「(* 指針變數名)」表示「*」後面的變數是定義的指針變數。最後的空括弧表示指針變數所指的是一個函數。
例如:
int (*pf)();
表示pf是一個指向函數入口的指針變數,該函數的返回值(函數值)是整型。
本例用來說明用指針形式實現對函數調用的方法。
int max(int a,int b){
if(a>b)return a;
else return b;
}
main(){
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxmum=%d",z);
}
從上述程序可以看出用,函數指針變數形式調用函數的步驟如下:
1) 先定義函數指針變數,如後一程序中第9行 int (*pmax)();定義 pmax為函數指針變數。
2) 把被調函數的入口地址(函數名)賦予該函數指針變數,如程序中第11行 pmax=max;
3) 用函數指針變數形式調用函數,如程序第14行 z=(*pmax)(x,y);
4) 調用函數的一般形式為:
(*指針變數名) (實參表)
使用函數指針變數還應注意以下兩點:
a) 函數指針變數不能進行算術運算,這是與數組指針變數不同的。數組指針變數加減一個整數可使指針移動指向後面或前面的數組元素,而函數指針的移動是毫無意義的。
b) 函數調用中"(*指針變數名)"的兩邊的括弧不可少,其中的*不應該理解為求值運算,在此處它只是一種表示符號。
2 指針型函數
前面我們介紹過,所謂函數類型是指函數返回值的類型。在C語言中允許一個函數的返回值是一個指針(即地址),這種返回指針值的函數稱為指針型函數。
定義指針型函數的一般形式為:
類型說明符 *函數名(形參表)
{
…… /*函數體*/
}
其中函數名之前加了「*」號表明這是一個指針型函數,即返回值是一個指針。類型說明符表示了返回的指針值所指向的數據類型。
如:
int *ap(int x,int y)
{
...... /*函數體*/
}
表示ap是一個返回指針值的指針型函數,它返回的指針指向一個整型變數。
本程序是通過指針函數,輸入一個1~7之間的整數,輸出對應的星期名。
main(){
int i;
char *day_name(int n);
printf("input Day No:\n");
scanf("%d",&i);
if(i<0) exit(1);
printf("Day No:%2d-->%s\n",i,day_name(i));
}
char *day_name(int n){
static char *name[]={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
return((n<1||n>7) ? name[0] : name[n]);
}
本例中定義了一個指針型函數day_name,它的返回值指向一個字元串。該函數中定義了一個靜態指針數組name。name數組初始化賦值為八個字元串,分別表示各個星期名及出錯提示。形參n表示與星期名所對應的整數。在主函數中,把輸入的整數i作為實參,在printf語句中調用day_name函數並把i值傳送給形參n。day_name函數中的return語句包含一個條件表達式,n值若大於7或小於1則把name[0]指針返回主函數輸出出錯提示字元串「Illegal day」。否則返回主函數輸出對應的星期名。主函數中的第7行是個條件語句,其語義是,如輸入為負數(i<0)則中止程序運行退出程序。exit是一個庫函數,exit(1)表示發生錯誤後退出程序,exit(0)表示正常退出。
應該特別注意的是函數指針變數和指針型函數這兩者在寫法和意義上的區別。如int(*p)()和int *p()是兩個完全不同的量。
int (*p)()是一個變數說明,說明p是一個指向函數入口的指針變數,該函數的返回值是整型量,(*p)的兩邊的括弧不能少。
int *p()則不是變數說明而是函數說明,說明p是一個指針型函數,其返回值是一個指向整型量的指針,*p兩邊沒有括弧。作為函數說明,在括弧內最好寫入形式參數,這樣便於與變數說明區別。
對於指針型函數定義,int *p()只是函數頭部分,一般還應該有函數體部分。
Ⅷ java引用與C語言指針的區別是什麼
java引用與C語言指針的區別有以下幾方面:
1、現象
指針在運行時可以改變其所指向的值,而引用一旦和某個對象綁定後就不再改變,總是指向最初的對象。
2、編譯
程序在編譯時分別將指針和引用添加到符號表上,符號表上記錄的是變數名及變數所對應地址。指針變數在符號表上對應的地址值為指針變數的地址值,而引用在符號表上對應的地址值為引用對象的地址值。符號表生成後就不會再改,因此指針可以改變指向的對象(指針變數中的值可以改),而引用對象不能改。
3、類型
引用其值為地址的數據元素,java封裝了的地址,可以轉成字元串查看,長度可以不必關心;C指針是一個裝地址的變數,長度一般是計算機字長,可以認為是個int。
4、內存佔用
所佔內存:引用聲明時沒有實體,不佔空間。C指針如果聲明後會用到才會賦值,如果用不到不會分配內存。
5、內存溢出
JAVA引用的使用許可權比較小,不會產生內存溢出。C指針是容易產生內存溢出的,所以程序員要小心使用,及時回收。
6、本質
JAVA中的引用和C中的指針本質上都是想通過一個別名,找到要操作的目標(變數對象等),方便在程序里操作。所不同的是JAVA的辦法更安全,使用更加方便些,但沒有了C的靈活,高效。
Ⅸ C++和C語言中指針有什麼區別
基本上沒有區別,c++僅僅只是在c語言的基礎上增加了面向對象的概念,所有它又被稱為是「帶類的C」,因此,c++在指針操作上增加了指向對象的指針(引用);但究其本質而言,指針仍然是內存中的地址,這一點沒有改變.