所謂指針就是一個(gè)地址,它必須初始化才能使用,所謂初始化就是要指向一個(gè)目標(biāo)。它的作用是,比如你在main函數(shù)里定義了一個(gè)const int a = 100,如果你想改變a的值,那么一般的辦法就行不通了,這個(gè)時(shí)候就能用到指針了,你定義一個(gè)指針指向a,然后通過指針對a的空間進(jìn)行操作達(dá)到改變a的目的。當(dāng)然一般人是不會(huì)這樣干的,這里只是為了說明指針的一個(gè)作用而已,指針能幫助你完成一些復(fù)雜的計(jì)算,用處很大。
成都創(chuàng)新互聯(lián)主營濂溪網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),濂溪h5小程序設(shè)計(jì)搭建,濂溪網(wǎng)站營銷推廣歡迎濂溪等地區(qū)企業(yè)咨詢
指針可以快速訪問數(shù)組中的元素,想訪問下一個(gè),就自加1,上一個(gè)就自減1,下一行就自加一行,上一行就自減一行,特別適用快速逐點(diǎn)處理圖像,
如:unsigned char img[1024][768],*p; int i,j; p=(unsigned char *)img; for ( i=0;i1024;i++) for ( j=0;j768;j++,p++ ) *p+=16;
指針還可以用不同類型來訪問同一組數(shù)據(jù):
unsigned char a[4],*p; unsigned int *q; p=a; *p=0x12; p++; *p=0x34; p++; *p=0x56; p++; *p=0x78; q=(unsigned int *)a; printf("%xH",*q);會(huì)輸出十六進(jìn)制數(shù)78563412H
另外指針可以用于給函數(shù)傳遞數(shù)組起始地址、結(jié)構(gòu)地址、類地址、結(jié)構(gòu)數(shù)組地址,這些復(fù)雜數(shù)據(jù)組合,函數(shù)返回值也是這樣,另外利用指針還能不從數(shù)組起始地址開始傳入數(shù)組。比如:char str[]; scanf("%s",str); printf("%s\n",str+1);
指針的用途非常廣泛,比如如果你想通過函數(shù)改變一個(gè)變量的值,就得用指針而不能用值傳遞。還有在很多時(shí)候變量,特別是對象的數(shù)據(jù)量實(shí)在太大,程序員就會(huì)用指針來做形參,只需要傳遞一個(gè)地址就行,大大提高了效率。簡單地說指針就是指向變量和對象的地址。
基本說明:
1、在計(jì)算機(jī)中,所有的數(shù)據(jù)都是存放在存儲(chǔ)器中的。 一般把存儲(chǔ)器中的一個(gè)字節(jié)稱為一個(gè)內(nèi)存單元, 不同的數(shù)據(jù)類型所占用的內(nèi)存單元數(shù)不等,如整型量占2個(gè)單元,字符量占1個(gè)單元等;
2、為了正確地訪問這些內(nèi)存單元,須為每個(gè)內(nèi)存單元編上號(hào)。 根據(jù)一個(gè)內(nèi)存單元的編號(hào)即可準(zhǔn)確地找到該內(nèi)存單元。既然根據(jù)內(nèi)存單元的編號(hào)或地址就可以找到所需的內(nèi)存單元,所以通常也把這個(gè)地址稱為指針。內(nèi)存單元的指針和內(nèi)存單元的內(nèi)容是兩個(gè)不同的概念。
簡單地說指針就是指向變量和對象的地址。
指針的用途非常廣泛,比如如果你想通過函數(shù)改變一個(gè)變量的值,就得用指針而不能用值傳遞。還有在很多時(shí)候變量,特別是對象的數(shù)據(jù)量實(shí)在太大,程序員就會(huì)用指針來做形參,只需要傳遞一個(gè)地址就行,大大提高了效率。
以上還只是指針的初步應(yīng)用,隨著你在C語言學(xué)習(xí)上的逐步深入,你會(huì)發(fā)現(xiàn)更多的用途的。
C里面函數(shù)都只能返回一個(gè)值,如果你的函數(shù)要返回兩個(gè)值,那就要用指針了,把變量地址傳進(jìn)函數(shù),然后把希望通過函數(shù)操作后想要的值存進(jìn)傳進(jìn)來的變量地址里面。當(dāng)然函數(shù)可以返回?cái)?shù)組,結(jié)構(gòu)體,但是你看多了你就知道,沒有人會(huì)這么做的,都返回指針。試想如果我有一個(gè)1萬個(gè)元素的數(shù)組,你會(huì)把它整個(gè)地傳進(jìn)一個(gè)函數(shù)里面或者整個(gè)地返回出來嗎?C語言里面都是傳值的,就是說傳進(jìn)函數(shù)的參數(shù)值首先被復(fù)制一邊賦值給形式參數(shù),你想想1萬個(gè)元素,夠嗆咯!但是有指針就好多了,我們可以把指針(數(shù)組的第一個(gè)元素的地址)傳進(jìn)函數(shù)里面,有了開始地址,函數(shù)就知道東西在哪兒,就直接去那兒操作就可以了。單憑這一點(diǎn),你就可以知道指針的威力,當(dāng)然你也知道了指針一個(gè)很大的用處就是用于函數(shù)之間參數(shù)的傳遞與返回。指針就相當(dāng)于一個(gè)代理一樣,通過代理你知道了你要的東西在哪兒,你去那個(gè)地方就可以了,而不是需要把東西整個(gè)地板到你面前。