内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

C語(yǔ)言中關(guān)于指針的學(xué)習(xí)

指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); 能很方便地使用數(shù)組和字符串; 并能象匯編語(yǔ)言一樣處理內(nèi)存地址,從而編出精練而高效的程序。指針極大地豐富了C語(yǔ)言的功能。 學(xué)習(xí)指針是學(xué)習(xí)C語(yǔ)言中最重要的一環(huán), 能否正確理解和使用指針是我們是否掌握C語(yǔ)言的一個(gè)標(biāo)志。同時(shí), 指針也是C語(yǔ)言中最為困難的一部分,在學(xué)習(xí)中除了要正確理解基本概念,還必須要多編程,上機(jī)調(diào)試。只要作到這些,指針也是不難掌握的。

       指針的基本概念 在計(jì)算機(jī)中,所有的數(shù)據(jù)都是存放在存儲(chǔ)器中的。 一般把存儲(chǔ)器中的一個(gè)字節(jié)稱為一個(gè)內(nèi)存單元, 不同的數(shù)據(jù)類型所占用的內(nèi)存單元數(shù)不等,如整型量占2個(gè)單元,字符量占1個(gè)單元等, 在第二章中已有詳細(xì)的介紹。為了正確地訪問(wèn)這些內(nèi)存單元, 必須為每個(gè)內(nèi)存單元編上號(hào)。 根據(jù)一個(gè)內(nèi)存單元的編號(hào)即可準(zhǔn)確地找到該內(nèi)存單元。內(nèi)存單元的編號(hào)也叫做地址。 既然根據(jù)內(nèi)存單元的編號(hào)或地址就可以找到所需的內(nèi)存單元,所以通常也把這個(gè)地址稱為指針。 內(nèi)存單元的指針和內(nèi)存單元的內(nèi)容是兩個(gè)不同的概念。 可以用一個(gè)通俗的例子來(lái)說(shuō)明它們之間的關(guān)系。我們到銀行去存取款時(shí), 銀行工作人員將根據(jù)我們的帳號(hào)去找我們的存款單, 找到之后在存單上寫(xiě)入存款、取款的金額。在這里,帳號(hào)就是存單的指針, 存款數(shù)是存單的內(nèi)容。對(duì)于一個(gè)內(nèi)存單元來(lái)說(shuō),單元的地址即為指針, 其中存放的數(shù)據(jù)才是該單元的內(nèi)容。在C語(yǔ)言中, 允許用一個(gè)變量來(lái)存放指針,這種變量稱為指針變量。因此, 一個(gè)指針變量的值就是某個(gè)內(nèi)存單元的地址或稱為某內(nèi)存單元的指針。圖中,設(shè)有字符變量C,其內(nèi)容為“K”(ASCII碼為十進(jìn)制數(shù) 75),C占用了011A號(hào)單元(地址用十六進(jìn)數(shù)表示)。設(shè)有指針變量P,內(nèi)容為011A, 這種情況我們稱為P指向變量C,或說(shuō)P是指向變量C的指針。 嚴(yán)格地說(shuō),一個(gè)指針是一個(gè)地址, 是一個(gè)常量。而一個(gè)指針變量卻可以被賦予不同的指針值,是變。 但在常把指針變量簡(jiǎn)稱為指針。為了避免混淆,我們中約定:“指針”是指地址, 是常量,“指針變量”是指取值為地址的變量。 定義指針的目的是為了通過(guò)指針去訪問(wèn)內(nèi)存單元。

      既然指針變量的值是一個(gè)地址, 那么這個(gè)地址不僅可以是變量的地址, 也可以是其它數(shù)據(jù)結(jié)構(gòu)的地址。在一個(gè)指針變量中存放一
      個(gè)數(shù)組或一個(gè)函數(shù)的首地址有何意義呢? 因?yàn)閿?shù)組或函數(shù)都是連續(xù)存放的。通過(guò)訪問(wèn)指針變量取得了數(shù)組或函數(shù)的首地址, 也就找到了該數(shù)組或函數(shù)。這樣一來(lái), 凡是出現(xiàn)數(shù)組,函數(shù)的地方都可以用一個(gè)指針變量來(lái)表示, 只要該指針變量中賦予數(shù)組或函數(shù)的首地址即可。這樣做, 將會(huì)使程序的概念十分清楚,程序本身也精練,高效。在C語(yǔ)言中, 一種數(shù)據(jù)類型或數(shù)據(jù)結(jié)構(gòu)往往都占有一組連續(xù)的內(nèi)存單元。 用“地址”這個(gè)概念并不能很好地描述一種數(shù)據(jù)類型或數(shù)據(jù)結(jié)構(gòu), 而“指針”雖然實(shí)際上也是一個(gè)地址,但它卻是一個(gè)數(shù)據(jù)結(jié)構(gòu)的首地址, 它是“指向”一個(gè)數(shù)據(jù)結(jié)構(gòu)的,因而概念更為清楚,表示更為明確。 這也是引入“指針”概念的一個(gè)重要原因。

創(chuàng)新互聯(lián)公司主營(yíng)石泉網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開(kāi)發(fā),石泉h5成都小程序開(kāi)發(fā)搭建,石泉網(wǎng)站營(yíng)銷推廣歡迎石泉等地區(qū)企業(yè)咨詢

文件型指針

#include<stdio.h>

int main()

{

  int *ptr;   // 聲明一個(gè)int指針

  int val = 1;  // 聲明一個(gè)int值

  ptr = &val;  // 為指針?lè)峙湟粋€(gè)int值的引用

  int deref = *ptr;  // 對(duì)指針進(jìn)行取值,打印存儲(chǔ)在指針地址中的內(nèi)容

  printf("deref地址=%ld,值=%d\n",ptr, deref);

}

第2行,我們通過(guò)*操作符聲明了一個(gè)int指針。接著我們聲明了一個(gè)int變量并賦值為1。然后我們用int變量的地址初始化我們的int指針。接下來(lái)對(duì)int指針取值,用變量的內(nèi)存地址初始化int指針。最終,我們打印輸出變量值,內(nèi)容為1。

第6行的&val是一個(gè)引用。在val變量聲明并初始化內(nèi)存之后,通過(guò)在變量名之前使用地址操作符&我們可以直接引用變量的內(nèi)存地址。

第8行,我們?cè)僖淮问褂?操作符來(lái)對(duì)該指針取值,可直接獲得指針指向的內(nèi)存地址中的數(shù)據(jù)。由于指針聲明的類型是int,所以取到的值是指針指向的內(nèi)存地址存儲(chǔ)的int值。

 

 

指針與數(shù)組

#include<stdio.h>

int main()

{

         intmyarray[4] = {1,2,3,0};

   int *ptr = myarray;

   printf("ptr地址=%ld,值*ptr=%d\n", ptr,*ptr);

   ptr++;

   printf("ptr地址=%ld,值*ptr=%d\n", ptr,*ptr);

   ptr++;

   printf("ptr地址=%ld,值*ptr=%d\n", ptr,*ptr);

   ptr++;

   printf("ptr地址=%ld,值*ptr=%d\n", ptr,*ptr);

}

C語(yǔ)言的數(shù)組表示一段連續(xù)的內(nèi)存空間,用來(lái)存儲(chǔ)多個(gè)特定類型的對(duì)象。與之相反,指針用來(lái)存儲(chǔ)單個(gè)內(nèi)存地址。數(shù)組和指針不是同一種結(jié)構(gòu)因此不可以互相轉(zhuǎn)換。而數(shù)組變量指向了數(shù)組的第一個(gè)元素的內(nèi)存地址。

一個(gè)數(shù)組變量是一個(gè)常量。即使指針變量指向同樣的地址或者一個(gè)不同的數(shù)組,也不能把指針賦值給數(shù)組變量。也不可以將一個(gè)數(shù)組變量賦值給另一個(gè)數(shù)組。然而,可以把一個(gè)數(shù)組變量賦值給指針,這一點(diǎn)似乎讓人感到費(fèi)解。把數(shù)組變量賦值給指針時(shí),實(shí)際上是把指向數(shù)組第一個(gè)元素的地址賦給指針。

 

 

指針與結(jié)構(gòu)體

#include<stdio.h>

struct person {

  intage;

 char *name;

};

 

int main()

{

 struct person first;

 struct person *ptr;

 first.age = 21;

 char *fullname = "full name";

 first.name = fullname;

  ptr= &first;

 printf("age=%d, name=%s\n", first.age, ptr->name);

}

 

 

 

 

 

 

#include<stdio.h>

#include <stdio.h> 

#include <conio.h> 

#include <string.h> 

#include <stdlib.h>  

main()

{

  int count,*array; /*count是一個(gè)計(jì)數(shù)器,array是一個(gè)整型指針,也可以理解為指向一個(gè)整型數(shù)組的首地址*/

  if((array=(int *) malloc(10*sizeof(int)))==NULL)

   {

    printf("不能成功分配存儲(chǔ)空間。");

    exit(1);

   }

  for (count=0;count<10;count++) /*給數(shù)組賦值*/

     array[count]=count;

  for(count=0;count<10;count++) /*打印數(shù)組元素*/

     printf("%d-",array[count]);

}

上例中動(dòng)態(tài)分配了10個(gè)整型存儲(chǔ)區(qū)域,然后進(jìn)行賦值并打印。例中if((array=(int *) malloc(10*sizeof(int)))==NULL)語(yǔ)句可以分為以下幾步:
1)分配10個(gè)整型的連續(xù)存儲(chǔ)空間,并返回一個(gè)指向其起始地址的整型指針
2)把此整型指針地址賦給array
3)檢測(cè)返回值是否為NULL
2、free函數(shù)
由于內(nèi)存區(qū)域總是有限的,不能不限制地分配下去,而且一個(gè)程序要盡量節(jié)省資源,所以當(dāng)所分配的內(nèi)存區(qū)域不用時(shí),就要釋放它,以便其它的變量或者程序使用。這時(shí)我們就要用到free函數(shù)。
其函數(shù)原型是:
void free(void *p)
作用是釋放指針p所指向的內(nèi)存區(qū)。
其參數(shù)p必須是先前調(diào)用malloc函數(shù)或calloc函數(shù)(另一個(gè)動(dòng)態(tài)分配存儲(chǔ)區(qū)域的函數(shù))時(shí)返回的指針。給free函數(shù)傳遞其它的值很可能造成死機(jī)或其它災(zāi)難性的后果。
注意:這里重要的是指針的值,而不是用來(lái)申請(qǐng)動(dòng)態(tài)內(nèi)存的指針本身。例:
int *p1,*p2;
p1=malloc(10*sizeof(int));
p2=p1;
……
free(p1) /*或者free(p2)*/
malloc返回值賦給p1,又把p1的值賦給p2,所以此時(shí)p1,p2都可作為free函數(shù)的參數(shù)。
malloc函數(shù)是對(duì)存儲(chǔ)區(qū)域進(jìn)行分配的。
free函數(shù)是釋放已經(jīng)不用的內(nèi)存區(qū)域的。

 

 

malloc函數(shù)
malloc函數(shù)的原型為:
void *malloc (unsigned int size)
其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間。其參數(shù)是一個(gè)無(wú)符號(hào)×××數(shù),返回值是一個(gè)指向所分配的連續(xù)存儲(chǔ)域的起始地址的指針。還有一點(diǎn)必須注意的是,當(dāng)函數(shù)未能成功分配存儲(chǔ)空間(如內(nèi)存不足)就會(huì)返回一個(gè)NULL指針。所以在調(diào)用該函數(shù)時(shí)應(yīng)該檢測(cè)返回值是否為NULL并執(zhí)行相應(yīng)的操作。

心得體會(huì):

堂上要講授許多關(guān)于c語(yǔ)言的語(yǔ)法規(guī)則,聽(tīng)起來(lái)十分枯燥無(wú)味,也不容易記住,死記硬背是不可取的。然而要使用c語(yǔ)言這個(gè)工具解決實(shí)際問(wèn)題,又必須掌握它。通過(guò)多次上機(jī)練習(xí),對(duì)于語(yǔ)法知識(shí)有了感性的認(rèn)識(shí),加深對(duì)它的理解,在理解的基礎(chǔ)上就會(huì)自然而然地掌握c語(yǔ)言的語(yǔ)法規(guī)定。對(duì)于一些內(nèi)容自己認(rèn)為在課堂上聽(tīng)懂了,但上機(jī)實(shí)踐中會(huì)發(fā)現(xiàn)原來(lái)(轉(zhuǎn)載自第。)理解的偏差,這是由于大部分學(xué)生是初次接觸程序設(shè)計(jì),缺乏程序設(shè)計(jì)的實(shí)踐所致。

學(xué)習(xí)c語(yǔ)言不能停留在學(xué)習(xí)它的語(yǔ)法規(guī)則,而是利用學(xué)到的知識(shí)編寫(xiě)c語(yǔ)言程序,解決實(shí)際問(wèn)題。即把c語(yǔ)言作為工具,描述解決實(shí)際問(wèn)題的步驟,由計(jì)算機(jī)幫助我們解題。只有通過(guò)上機(jī)才能檢驗(yàn)自己是否掌握c語(yǔ)言、自己編寫(xiě)的程序是否能夠正確地解題。

當(dāng)前文章:C語(yǔ)言中關(guān)于指針的學(xué)習(xí)
當(dāng)前路徑:http://www.rwnh.cn/article28/psgecp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、軟件開(kāi)發(fā)、企業(yè)建站、App開(kāi)發(fā)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
高雄县| 奈曼旗| 吴堡县| 固安县| 辉南县| 惠水县| 西丰县| 兴化市| 武清区| 闻喜县| 南充市| 丽江市| 府谷县| 玉山县| 繁昌县| 景宁| 喀喇| 读书| 亚东县| 电白县| 虹口区| 承德县| 灌云县| 峨眉山市| 尖扎县| 平武县| 乐昌市| 洪江市| 巴里| 桂东县| 于田县| 原平市| 金昌市| 乳山市| 英山县| 宜春市| 九寨沟县| 泾阳县| 墨玉县| 乌兰察布市| 兴业县|