Ⅰ 什麼是指針
1、在計算機科學中,指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向(points to)存在電腦存儲器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為「指針」。意思是通過它能找到以它為地址的內存單元。
2、在信息工程中指針是一個用來指示一個內存地址的計算機語言的變數或中央處理器(CPU)中寄存器(Register)【用來指向該內存地址所對應的變數或數組】。指針一般出現在比較接近機器語言的語言,如匯編語言或C語言。面向對象的語言如Java一般避免用指針。指針一般指向一個函數或一個變數。
3、另外,指針也指鍾表中用來指示對應時間的部件。
(1)網路指針是什麼意思擴展閱讀:
指針的機制比較簡單,其功能可以被集中重新實現成更抽象化的引用(reference)數據形別。許多編程語言中都支持某種形式的指針,最著名的是C語言,但是有些編程語言對指針的運用採取比較嚴格的限制,如Java一般避免用指針,改為使用引用。
有兩種含義,一是作為數據類型,二是作為實體。
指針作為實體,是一個用來保存一個內存地址的計算機語言中的變數。指針一般出現在比較底層的程序設計語言中,如C語言。高層的語言如Java一般避免用指針,而是引用。
指針作為數據類型,可以從一個函數類型、一個對象類型或者一個不完備類型中導出。從中導出的數據類型稱之為被引用類型(referenced type)。指針類型描述了一種對象,其值為對被引用類型的實體的引用。
參考資料:網路-指針
Ⅱ 指針的定義是什麼
在信息工程中,指針是一個用來指示一個內存地址的計算機語言的變數或中央處理器(CPU)中的寄存器(Register)。指針一般出現在比較近機器語言的語言,如匯編語言或C語言。面向對象語言如Java一般避免用指針,而是引用。
Ⅲ 手機設置裡面的指針速度是什麼意思
假設你用的搜狗輸入法,你把指針速度調高的話,會發現:你在虛擬鍵盤上打拚音字母的時候,鍵盤上方會出現一個個供選擇的詞或字,指針速度就是指這個詞或字出現的快慢程度(即出現的靈敏度),你調慢看看,就會發現明顯不同。
Ⅳ 指針的概念
在計算機科學中,指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向(points to)存在電腦存儲器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為「指針」。意思是通過它能找到以它為地址的內存單元。 在高級語言中,指針有效地取代了在低級語言,如匯編語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法地址之中。指針參考了存儲器中某個地址,通過被稱為反參考指針的動作,可以取出在那個地址中存儲的值。作個比喻,假設將電腦存儲器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是一個指向特定頁面的指針;根據便利粘貼面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當於是對這個指針進行反參考的動作。
Ⅳ 什麼像一個指針,用來指計算機或網路上指定的文件
根據你的形容應該是路由表了,路由表是網路設備轉發數據的依據,等同於現實生活中人們使用地圖一樣。路由器收到數據後會查詢路由表,然後轉發數據。
路由器轉發的ip數據包,有定義數據的源地址和目的地址,而目的地址的載荷數據應該就是你說指的特定文件了。
Ⅵ C語言里的指針是什麼意思,起什麼作用
1:指針是一個地址,指向的是個類型:
我們知道,c語言中的類型有int,char,bool(這個不常用),一般我們使用int,char就可以滿足一般的類型需求的,如果對於變數的長度過大,就是用long ,float,double,關於各個類型使用的的長度問題,可以使用sizeof(int)或者sizeof(long)來查看各個類型,在系統中的小。
而指針就是一個8個位元組(64系統)。
2:指針指向的是地址,地址指向的是內容:
我們需要一個變數,來存儲地址,這個變數的值是地址,但是我們可以通過修改變數的值,來不斷的改變地址,但是,我們如果需要改變該個地址的值的話,就需要,對地址的值進行修改,而不改變地址。
int a = 10;
int *p ;
p = &a;
*p =11;
a=?
這里我們看到,p 是一個變數,我們使用p來存儲變數a的地址,這是,我們使用*p對於這個變數進行賦值,那麼a的值最後,是多少呢,結果是11,因為我們使用*p賦值,就相當於a=11,賦值效果一樣的。
3:指針的指針,是面對於指針的變數:
我們說,指針的指針的時候,就有點不清楚了,到底怎麼區分指針和指針的指針呢。
char *p;
char **pr;
pr = &p;
我們這樣看就清楚了一點,char *(*pr); *pr是一個存儲的值為指針的變數,pr就是存儲上個變數地址的變數。整合起來就是,pr是一個存儲的值為指針的地址的變數。
這樣,我們就基本,對於指針有一個直接的了解了。
Ⅶ 指針是什麼意思
簡單點說,就是內存地址。
比如,一組數據,1,2,3,4,;按照一定順序存入計算機的內存,每一個數都對應一個地址。
計算機內部的操作就是到一個變數所對應的地址去取數。
Ⅷ 計算機中指針到底是什麼意思呢怎麼看都沒看太懂,希望哪位大神可以用通俗易懂的語言解釋一下,謝謝!
指針實質上是一個整數,代表的是一個內存地址。
例如,有100個凳子擺成一排。第15個凳子上坐著張三,第2個座位上擺著一個紙條,上面寫著「第15個座位上的人」。
那麼,第15個凳子上的張三就是一個值,第二個座位上的紙條就是一個指針。你可以直接找到張三,也可以循著第二個座位上的紙條找到張三。
Ⅸ 指針是什麼意思
1.在日常生活中指針是儀器或鍾表上的,可動的,一般狹長的,往往在一段尖的用來指示測量的數據的裝置。
2.在信息工程中指針是一個用來指示一個內存地址的計算機語言的變數或中央處理器(CPU)中寄存器(Register)。指針一般出現在比較近機器語言的語言,如匯編語言或C語言。面向對象的語言如Java一般避免用指針。指針一般指向一個函數或一個變數。在使用一個指針時,一個程序既可以直接使用這個指針所儲存的內存地址,又可以使用這個地址里儲存的變數或函樹的值。
大家都認為,c語言之所以強大,以及其自由性,很大部分體現在其靈活的指針運用上。因此,說指針是c語言的靈魂,一點都不為過。同時,這種說法也讓很多人產生誤解,似乎只有c語言的指針才能算指針。basic不支持指針,在此不論。其實,pascal語言本身也是支持指針的。從最初的pascal發展至今的object pascal,可以說在指針運用上,絲毫不會遜色於c語言的指針。
以下內容分為八部分,分別是
一、類型指針的定義
二、無類型指針的定義
三、指針的解除引用
四、取地址(指針賦值)
五、指針運算
六、動態內存分配
七、字元數組的運算
八、函數指針
一、類型指針的定義。對於指向特定類型的指針,在c中是這樣定義的:
int *ptr;
char *ptr;
與之等價的object pascal是如何定義的呢?
var
ptr : ^integer;
ptr : ^char;
其實也就是符號的差別而已。
二、無類型指針的定義。c中有void *類型,也就是可以指向任何類型數據的指針。object pascal為其
定義了一個專門的類型:pointer。於是,
ptr : pointer;
就與c中的
void *ptr;
等價了。
三、指針的解除引用。要解除指針引用(即取出指針所指區域的值),c 的語法是 (*ptr),object
pascal則是 ptr^。
四、取地址(指針賦值)。取某對象的地址並將其賦值給指針變數,c 的語法是
ptr = &object;
object pascal 則是
ptr := @object;
也只是符號的差別而已。
五、指針運算。在c中,可以對指針進行移動的運算,如:
char a[20];
char *ptr=a;
ptr++;
ptr+=2;
當執行ptr++;時,編譯器會產生讓ptr前進sizeof(char)步長的代碼,之後,ptr將指向a
[1]。ptr+=2;這句使得ptr前進兩個sizeof(char)大小的步長。同樣,我們來看一下object pascal中如何實
現:
var
a : array [1..20] of char;
ptr : pchar; //pchar 可以看作 ^char
begin
ptr := @a;
inc(ptr); // 這句等價於 c 的 ptr++;
inc(ptr, 2); //這句等價於 c 的 ptr+=2;
end;
只是,pascal中,只允許對有類型的指針進行這樣的運算,對於無類型指針是不行的。
六、動態內存分配。c中,使用malloc()庫函數分配內存,free()函數釋放內存。如這樣的代碼:
int *ptr, *ptr2;
int i;
ptr = (int*) malloc(sizeof(int) * 20);
ptr2 = ptr;
for (i=0; i<20; i++){
*ptr = i;
ptr++;
}
free(ptr2);
object pascal中,動態分配內存的函數是getmem(),與之對應的釋放函數為freemem()(傳統
pascal中獲取內存的函數是new()和 dispose(),但new()只能獲得對象的單個實體的內存大小,無法取得連
續的存放多個對象的內存塊)。因此,與上面那段c的代碼等價的object pascal的代碼為:
var ptr, ptr2 : ^integer;
i : integer;
begin
getmem(ptr, sizeof(integer) * 20);
//這句等價於c的 ptr = (int*) malloc(sizeof(int) * 20);
ptr2 := ptr; //保留原始指針位置
for i := 0 to 19 do
begin
ptr^ := i;
inc(ptr);
end;
freemem(ptr2);
end;
對於以上這個例子(無論是c版本的,還是object pascal版本的),都要注意一個問題,就是分配
內存的單位是位元組(byte),因此在使用getmem時,其第二個參數如果想當然的寫成 20,那麼就會出問題
了(內存訪問越界)。因為getmem(ptr, 20);實際只分配了20個位元組的內存空間,而一個整形的大小是四個
位元組,那麼訪問第五個之後的所有元素都是非法的了(對於malloc()的參數同樣)。
七、字元數組的運算。c語言中,是沒有字元串類型的,因此,字元串都是用字元數組來實現,於是也
有一套str打頭的庫函數以進行字元數組的運算,如以下代碼:
char str[15];
char *pstr;
strcpy(str, "teststr");
strcat(str, "_testok");
pstr = (char*) malloc(sizeof(char) * 15);
strcpy(pstr, str);
printf(pstr);
free(pstr);
而在object pascal中,有了string類型,因此可以很方便的對字元串進行各種運算。但是,有時
我們的pascal代碼需要與c的代碼交互(比如:用object pascal的代碼調用c寫的dll或者用object pascal
寫的dll准備允許用c寫客戶端的代碼)的話,就不能使用string類型了,而必須使用兩種語言通用的字元數
組。其實,object pascal提供了完全相似c的一整套字元數組的運算函數,以上那段代碼的object pascal
版本是這樣的:
var str : array [1..15] of char;
pstr : pchar; //pchar 也就是 ^char
begin
str(@str, 'teststr'); //在c中,數組的名稱可以直接作為數組首地址指針來用
//但pascal不是這樣的,因此 str前要加上取地址的運算符
strcat(@str, '_testok');
getmem(pstr, sizeof(char) * 15);
str(pstr, @str);
write(pstr);
freemem(pstr);
end;
八、函數指針。在動態調用dll中的函數時,就會用到函數指針。假設用c寫的一段代碼如下:
typedef int (*pvfn)(int); //定義函數指針類型
int main()
{
hmole hmole = loadlibrary("test.dll");
pvfn pvfn = null;
pvfn = (pvfn) getprocaddress(hmole, "function1");
pvfn(2);
freelibrary(hmole);
}
就我個人感覺來說,c語言中定義函數指針類型的typedef代碼的語法有些晦澀,而同樣的代碼在
object pascal中卻非常易懂:
type pvfn = function (para : integer) : integer;
var
fn : pvfn;
//也可以直接在此處定義,如:fn : function (para:integer):integer;
hm : hmole;
begin
hm := loadlibrary('test.dll');
fn := getprocaddress(hm, 'function1');
fn(2);
freelibrary(hm);
end;