六構造數(shù)據(jù)類型課件_第1頁
六構造數(shù)據(jù)類型課件_第2頁
六構造數(shù)據(jù)類型課件_第3頁
六構造數(shù)據(jù)類型課件_第4頁
六構造數(shù)據(jù)類型課件_第5頁
已閱讀5頁,還剩119頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

六構造數(shù)據(jù)類型回顧-1循環(huán)結構的特點是,在給定條件成立時,重復執(zhí)行某程序段,直到條件不成立為止while循環(huán)用于在給定條件為真的情況下重復執(zhí)行一組操作,while循環(huán)先判斷后執(zhí)行do-while循環(huán)先執(zhí)行后判斷,因此循環(huán)將至少執(zhí)行一次在循環(huán)中,需要修改循環(huán)變量的值以改變循環(huán)條件,否則有可能形成死循環(huán)循環(huán)嵌套必須將內層循環(huán)完整的包含在外層循環(huán)中回顧-2for循環(huán)與while循環(huán)類似,屬于先判斷后執(zhí)行for語句中有三個表達式:表達式1通常用來給循環(huán)變量賦初值;表達式2通常是循環(huán)條件;表達式3用來更新循環(huán)變量的值for語句中的各個表達式都可以省略,但要注意分號分隔符不能省略如果省略表達式2和表達式3,則需要在循環(huán)體內設法結束循環(huán),否則會導致死循環(huán)回顧-3break語句用在循環(huán)中時,可以直接終止循環(huán),將控制轉向循環(huán)后面的語句continue語句的作用是跳過循環(huán)體中剩余的語句而執(zhí)行下一次循環(huán)嵌套循環(huán)時,必須將被嵌套的循環(huán)語句完整地包含在外層循環(huán)的循環(huán)體內本章目標理解數(shù)組、結構體、指針的用途熟練掌握一維數(shù)組的使用掌握二維數(shù)組的使用掌握結構體的使用掌握指針的使用熟悉數(shù)組、數(shù)組、指針的綜合使用1、數(shù)組數(shù)組的用途問題: 已經知道成都2008年3月份每天的溫度,求平均溫度。方法:定義31個變量,分別表示每天的溫度,然后求平均值?用數(shù)組更簡單intindex;floatsum=0.0,avg,temperature[31];for(index=1;index<=31;index++){

scanf(“%f”,&temperature[index]);}for(index=1;index<=31;index++){ sum=sum+temperature[index];}avg=sum/31;C語言中的數(shù)組Rate1513973210Rate[

4

]數(shù)組名下標標明了元素在數(shù)組中的位置

數(shù)組元素下標數(shù)組大小數(shù)組是可以在內存中連續(xù)存儲多個元素的結構數(shù)組中的所有元素必須屬于相同的數(shù)據(jù)類型數(shù)組類型聲明一維數(shù)組datatype

arrayName[size];類型說明符int、char、float…數(shù)組名常量表達式:數(shù)組大小intnum[50];charname[20];doublerate[6];#defineCOUNT20...int

student[COUNT

];數(shù)組初始化intarr[10]={10,9,8,7,6,5,4,3,2,1,0};

//錯誤!越界了intarr[10]={9,8,7,5};//正確,后面的6個元素未初始化int

arr[]={9,8,7};

//正確(但要求不使用):元素個數(shù)為3int

arr[]={};

//錯誤,到底是幾個元素?內存為一維數(shù)組動態(tài)賦值floatprice[4];printf(“Enterpricesof4books\n”);for(i=0;i<=3;i++){

scanf(“%f”,&price[i]);}price[0]price[1]price[2]price[3]price42.0090.5027.551.50數(shù)組在內存的存放形式數(shù)組元素在內存的存放:順序、連續(xù)一維數(shù)組mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.077.552.0...94.0低地址

高地址下標與地址的關系mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.077.552.0...94.02000H2004H2008H200CH。。。218CH

[]

稱為下標運算符。

數(shù)組名是數(shù)組的首地址,是一個地址常量。

數(shù)組元素則是數(shù)值。引用數(shù)組元素時,根據(jù)首地址和下標,自動計算出該元素的實際地址,取出該地址的內容進行操作。如引用mark[2]:(1)計算

2000+2*4=2008(2)取出2008的內容一維數(shù)組示例#include<stdio.h>voidmain(){

inti; floatitem_rate[5],total=0;

printf("\n

請輸入商品價格:\n");

for(i=0;i<5;i++) {

scanf("%f",&item_rate[i]); total=total+item_rate[i]; }

printf(“\n所有商品的合計費用:%f\n“,total);}

內存循環(huán)執(zhí)行5次請輸入商品價格:35.5045.82340.780itotal00Item_rate35.5035.5045.82340.7806225.0所有商品的合計費用:225.000000二維數(shù)組b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]1234563000H3002H3004H3006H3008H300AH例如:整型數(shù)組bb[2][3]={ {1,2,3},

{4,5,6}};二維數(shù)組存放:

多維數(shù)組的元素按行順序存放。地址值數(shù)組元素先存放第

1

行的所有元素,再存放第

2

行的所有元素。二維數(shù)組的訪問

inti,j,num[2][3];for(i=0;i<2;i++) { for(j=0;j<3;j++) {

num[i][j]=i*j; } }

一維數(shù)組的長度在C中,使用ARRAY_LEN()宏來處理一維數(shù)組,可以提高程序的靈活性。#defineARRAY_LEN(x)(sizeof(x)/sizeof(x[0]))數(shù)組的使用#include<stdio.h>#defineCOUNT5#defineARRAY_LEN(x)(sizeof(x)/sizeof(x[0]))voidmain(void){

inti,number[COUNT];

printf("Pleaseenter%dnumber:\n",COUNT);for(i=0;i<ARRAY_LEN(number)

;i++){

scanf("%d",&number]);}}數(shù)組越界問題(測試環(huán)境:VC++6.0)#include<string.h>#include<stdio.h>#defineCHAR_COUNT16voidAddOne(intcount,charp[]){

inti; for(i=0;i<=count;i++) {

p[i]=p[i]+1; }}數(shù)組越界問題–續(xù)voidmain(void){

intcount=CHAR_COUNT; charstr[CHAR_COUNT]={0};

printf("Pleaseenteraword:\n");

scanf("%s",str);

AddOne(count,str);

printf("%d",count);

fflush(stdin);

getchar();}字符串數(shù)據(jù)字符串類型charname[40]={0};C語言中沒有字符串數(shù)據(jù)類型,一般用字符數(shù)組表示,因此字符串是數(shù)組的一種特例。字符數(shù)組與字符串的區(qū)別是:表示字符串的字符數(shù)組中至少有一個元素為字符’\0’,即字符串結束標志2、結構體結構定義結構定義的一般形式

struct

結構類型名稱

{

數(shù)據(jù)類型成員名1;

數(shù)據(jù)類型成員名2;……

數(shù)據(jù)類型成員名n;

};//此處必須有分號struct

為關鍵字。結構類型名稱是所定義的結構類型標識,由用戶自己定義;{}

中包圍的是組成該結構的成員;每個成員的數(shù)據(jù)類型可以是任何類型。結構定義實例

為了描述日期可以定義如下結構:

structdate{

intyear;

intmonth;

intday; };為了處理通訊錄,可以定義如下結構:

structaddress{ charname[30]; //姓名。

charstreet[40];//街道名稱

charcity[20]; //城市

charstate[2];//省市代碼

unsignedlongzip; //郵政編碼};結構變量說明結構變量說明的一般形式

struct

結構類型名稱結構變量名; 系統(tǒng)為所說明的結構變量按照結構定義時說明的組成(成員分量),分配存儲數(shù)據(jù)的實際內存單元。 例:將變量today說明為date型的結構變量:

structdatetoday;

說明多個address型的結構變量:

structaddress

wang,li,zhang;結構變量占用內存情況

結構變量的各個分量在內存中占用連續(xù)存儲區(qū)域,所占內存大小為每個分量占用內存的長度之和。4字節(jié)4字節(jié)4字節(jié)today(structdate)12個字節(jié)yearmonthdaywang(structaddress)96個字節(jié)30字節(jié)40字節(jié)20字節(jié)2字節(jié)4字節(jié)namestreetcitystatezipintcharunsignedlong結構變量中的成員分量引用結構變量中的成員分量訪問結構中的成員是通過成員的名字。在程序中使用結構中成員的方法為:

結構變量名.成員名稱 例:將“92/10/01”送入結構變量today,對其各個成員分別賦值:

today.year=92;

today.month=10;

today.day=1;指明結構成員的符號“.”是運算符,含義是訪問結構中的成員?!?”操作的優(yōu)先級最高。結合性為從左到右。

結構體賦值規(guī)范:today.year=YearOf(Now);today.month=MonthOf(Now);today.day=DayOf(Now);today.year =YearOf(Now);today.month =MonthOf(Now);today.day =DayOf(Now);結構體的用途使用結構化數(shù)據(jù)可以明確表明數(shù)據(jù)間的關系Name =InputName;Address =InputAddress;Phone =InputPhone;Title =InputTitle;Department=InputDepartment;Bonus =InputBonus;Employee.Name =InputName;Empployee.Address =InputAddress;Employee.Phone =InputPhone;Supervisor.Title =InputTitle;Supervisor.Department =InputDepartment;Supervisor.Bonus =InputBonus;使用結構化數(shù)據(jù)來簡化對成塊數(shù)據(jù)的操作結構體之間可以直接賦值,避免了多個成員直接賦值的問題可以在結構體中增加一個元素,而賦值語句不變使用結構化數(shù)據(jù)來簡化參數(shù)表

可以通過使用結構化數(shù)據(jù)來簡化子程序參數(shù)表位域(位段)有些信息在存儲時,并不需要占用一個完整的字節(jié),而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1兩種狀態(tài),用一位二進位即可。航空設備(例如:飛機)上的使用的ARINC429總線上傳輸?shù)臄?shù)據(jù)只能是一個32位的數(shù)據(jù),使用的一個或多個位表示信息,因此只能使用位域。位域的定義格式

struct

位域結構名

{

位域1;

位域2;

位域3;

位域4;};//定義在前面的是低位,后面是高位其中位域列表的形式為:類型說明符位域名:位域長度;

typedefunsignedcharUInt8;typedef

struct

{UInt8Bit0:1;UInt8Bit1:1;UInt8Bit2:1;UInt8Bit3:1;UInt8Bit4:1;UInt8Bit5:1;UInt8Bit6:1;UInt8Bit7:1;}rec8Bit;//表示一個包含8個二進制位的結構體;

1.位域在本質上就是一種結構體類型,不過其成員是按二進位分配的。2.位域的基本數(shù)據(jù)類型可以是unsignedchar,unsignedshort,unsignedint(long),因此位域中各元素的長度不能超過基本數(shù)據(jù)類型的長度。

3.位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:

structk

{

inta:1;

int:2;/*該2位不能使用*/

intb:3;

intc:2;

};3、枚舉枚舉類型是允許對某一類對象的每一個成員都用英語來進行描述類型通常知道該對象的所有可能值所有值都是常量enum

枚舉名

{

枚舉值表;};

在枚舉值表中應羅列出所有可用值。這些值也稱為枚舉元素。例如:enumweekday

{sun,mou,tue,wed,thu,fri,sat};

該枚舉名為weekday,枚舉值共有7個,即一周中的七天。凡被說明為weekday類型變量的取值只能是七天中的某一天。枚舉類型的使用enumCOLOR{COLOR_INVALID,COLOR_RED,COLOR_GREEN,COLOR_BLUE};enumCOLORselectedColor;selectedColor=COLOR_RED;使用枚舉類型的好處使用枚舉類型來提高可讀性和修改性

if(COLOR_RED==ChosenColor)比

if(1==ChosenColor

)含義更明確。用枚舉類型來代替邏輯變量如果有兩種以上的結果,則使用Success,Warning和FatalError

三個值比Success和Failure更好。4、sizeof運算符用于構造數(shù)據(jù)類型基本數(shù)據(jù)類型所占存儲空間sizeof(int) =4sizeof(short) =2sizeof(long) =4sizeof(char) =1sizeof(float) =4sizeof(double) =8sizeof(指針變量) =4sizeof(string) =字符個數(shù)+1sizeof(struct) =各成員所占空間之和(???)sizeof(array) =類型所占空間乘元素個數(shù)一個中文漢字占兩個字節(jié)#include<stdio.h>int

main(int

argc,char*argv[]){chargender[4]="男";

printf("gender=%s\n",gender);

printf("sizeof(男)=%d\n",sizeof("男"));

printf("sizeof(gender)=%d\n",sizeof(gender));

system("PAUSE");return0;}數(shù)組的存儲空間#include<stdio.h>structdate{

intyear;intmonth;intday;};int

main(void){charletter[10];intnumber[10];doublerate[10];

structdatebirthday[10];

printf("sizeof(letter)=%d\n",sizeof(letter));

printf("sizeof(number)=%d\n",sizeof(number));

printf("sizeof(rate)=%d\n",sizeof(rate));

printf("sizeof(birthday)=%d\n",sizeof(birthday));}sizeof_array.c結構體的存儲空間#include<stdio.h>structdate{

intyear;

intmonth;

intday;};voidmain(void){

structdatetoday;

structdatebirthday[10];

printf("sizeof(today)=%d\n",sizeof(today));

printf("sizeof(birthday)=%d\n",sizeof(birthday));}sizeof_struct.c結構體對齊問題#include<stdio.h>structstudent{charname[4];shortage;chargender;};voidmain(void){

printf("sizeof(structstudent)=%d\n",sizeof(structstudent));}結構體的長度一般是結構體里面最長的數(shù)據(jù)元素(類型)的整數(shù)倍。如果結構體內存在長度大于處理器位數(shù)的元素,那么就以處理器的位數(shù)為對齊單位。未全部使用的位域定義struct

recSwitchStatus{

intD1:1;

intD2:1;

intD3:1;

intD4:1;};//sizeof(recSwitchStatus)=4,因為基本類型為int枚舉、字符串的存儲空間#include<stdio.h>enumweekday{

sun,mou,tue,wed,thu,fri,sat};int

main(void){

enumweekdaygiveDay;charstrArray[]="Welcome";char*strPointer="Welcome";

printf("sizeof(giveDay)=%d\n",sizeof(giveDay));

printf("sizeof(strArray)=%d\n",sizeof(strArray));

printf("sizeof(strPointer)=%d\n",sizeof(strPointer));}sizeof_other.c5、指針求兩個數(shù)之和#include<stdio.h>voidmain(void){

intadd1,add2,sum;

scanf("%d%d",&add1,&add2);sum=add1+add2;

printf("%d+%d=%d",add1,add2,sum);}變量地址變量add1,add2,sum的地址假設add1的值為10,add2的值為20,則sum為30......102030......intadd1;intadd2;intsum;(0x22FF74)int*pAdd1;(0x22FF70)int*pAdd2;(0x22FF6C)int*pSum;變量地址內存布局變量名指針#include<stdio.h>voidmain(void){

intadd1,add2,sum;//(0x22FF74),(0x22FF70),(0x22FF6C)

scanf("%d%d",&add1,&add2);

//scanf("%d%d",(0x22FF74),(0x22FF70));sum=add1+add2;

//(0x22FF6C)=(0x22FF74)+(0x22FF70);

printf("%d+%d=%d",add1,add2,sum);

//printf("%d+%d=%d",(0x22FF74),(0x22FF70),(0x22FF6C));}變量名在變量編譯后用地址表示(偏移量表示)由于在編寫代碼時不知道變量的地址,即使知道,地址也很難記憶,因此在需要訪問變量的地址時用指針變量來表示變量的值和地址程序輸入add1輸入add2計算sum1020存儲sum30內存FB0C(add1)FB08(add2)FB04(sum)定義add1,add2,sum指針也是一個變量,只不過該變量中存儲的是另一個對象的內存地址如果一個變量存儲另一個對象的地址,則稱該變量指向這個對象由于指針值是數(shù)據(jù),指針變量可以賦值,所以一個指針的指向在程序執(zhí)行中可以改變。指針p在執(zhí)行中某時刻指向變量x,在另一時刻也可以指向變量y指針簡介

變量與地址程序中:inti;

floatk;

內存中每個字節(jié)有一個編號-----地址…...…...200020042007內存0xhhhhik

編譯或函數(shù)調用時為其分配內存單元變量是對程序中數(shù)據(jù)存儲空間的抽象指針與指針變量…...…...2000200420062005整型變量i10變量i_pointer200120022003指針:一個變量的地址指針變量:專門存放變量地址的變量2000指針指針變量

變量的內容

變量的地址i_pointer=&ii=*i_pointer指針運算符&與*運算符含義含義:取變量的地址含義:

取指針所指向變量的內容兩者關系:互為逆運算理解…...…...2000200420062005整型變量

i10變量i_pointer2001200220032000指針變量i_pointer-----指針變量,它的內容是地址量*i_pointer----指針的目標變量,它的內容是數(shù)據(jù)&i_pointer---指針變量占用內存的地址i_pointer&ii*i_pointer指針變量指針變量的定義一般形式:數(shù)據(jù)類型*指針名;合法標識符指針的目標變量的數(shù)據(jù)類型表示定義指針變量不是‘*’運算符例int

*p1,*p2;

注意:1、int*p1,*p2;

指針變量名是p1,p2,不是*p1,*p22、指針變量只能指向定義時所規(guī)定類型的變指針變量的初始化和賦值指針變量的初始化一般形式:數(shù)據(jù)類型*指針名=初始地址值;例inti1,i2,i3;

int*pi1=&i1,*pi2=&i2;pi1=&i3;pi2=pi1;指針變量的名稱通常是在它指向的變量(或數(shù)據(jù)類型)前加一個p來表示。指針運算實例實例:已知:int

x=2,y,*px;x為一般變量,px為指針型變量px

px

=&x; 取變量x的地址賦值給指針px

又稱為讓px指向變量x

x=10;若px已經指向x,則可以用*px

代替變量xx210<==>

*px

=10;也稱為間接訪問

y=x; <==>y=*px;

取指針px的內容指針的基本運算指針的基本運算是賦予不同的地址…...…...pi2pi1pi1=pi2;實質上是pi1的值發(fā)生了變化,這種方式很危險,如果pi1原來指向的是動態(tài)分配內存,則執(zhí)行pi1=pi2后,pi1原來指向的內存區(qū)域將成為無法訪問的“懸掛內存”,如果是頻繁進行這種操作,則最終將消耗完所有內存指針加減運算指針與小整數(shù)加減表示指針在內存空間向下或向上移動;移動單位是其基類型的長度

當指針p指向數(shù)組中的元素時,n(一般為1)為正整數(shù):

p+n表示:指針p所指向當前元素之后的第n個元素;

p-n表示:指針p所指向當前元素之前的第n個元素。

p+4p+5p+6p+7p+8............p+3............數(shù)組低地址高地址指針的存儲空間:sizeof_pointer.c#include<stdio.h>structdate{intyear;intmonth;intday;};int

main(void){

inti,*pInt=&i;

structdatetoday,*pToday=&today;

intintArray[10],*pIntArray=intArray;

printf("sizeof(pInt)=%d\n",sizeof(pInt));

printf("sizeof(pToday)=%d\n",sizeof(pToday));

printf("sizeof(pIntArray)=%d\n",sizeof(pIntArray));}規(guī)則:所有指針變量的所占的存儲空間都是4個字節(jié),不管它是指向什么類型的變量指針使用總則隨時關注指針變量所指向的內容。初始化使用過程中,指針指向的當前位置使用后(如果時動態(tài)分配內存,則需要清除)基本類型與指針intswap(int*p1,int*p2){

inttemp=*p1; *p1=*p2; *p2=temp;}intpara1=1,para2=2,result;result=swap(¶1,¶2);數(shù)組與指針數(shù)組與指針 數(shù)組中的每個元素都可以通過下標唯一確定,即通過下標可以訪問(操作)數(shù)組中的元素,稱為下標方式。 也可以通過數(shù)組下標方式完成的訪問(操作)均可以通過指針方式實現(xiàn)。稱為指針方式。假設:floatrate[100];

數(shù)組名:數(shù)組的標識rate

數(shù)組元素的地址:數(shù)組中一個具體元素的地址(&rate[k])

數(shù)組首地址(數(shù)組起始地址):數(shù)組中第一個元素(0號元素)的地址(&rate[0]或用數(shù)組的名稱

rate

表示)。那么下面關系表達式成立:

rate==&rate[0]inti,array[10];p=array;for(i=0;i<ARRAY_LEN(array);i++){ *p=i; p++;

}for(i=0;i<ARRAY_LEN(array);i++){

printf(“%d”,*p); p++;

}數(shù)組與指針例intarray[10];

int*p;

p=&array[0];或int*p=&array[0];或int*p=array;&array[0]整型指針parray[0]array[1]array[2]array[3]array[9]...p數(shù)組名是表示數(shù)組首地址的地址常量p=array;#include<stdio.h>#defineARRAY_LEN(x)(sizeof(x)/sizeof(x[0]))int

main(void){

inti,rate[5];

printf("valueofrateis:%x\n",rate);for(i=0;i<ARRAY_LEN(rate)

;i++){

printf("addressofrate[%d]is:%x\n",i,&rate[i]);}return0;}intrate[5];rate==&rate[0]數(shù)組元素表示方法01239...aa+9a+1a+2地址元素下標法a[0]a[1]a[2]a[9]01239...pp+9p+1p+2地址元素指針變量法*p*(p+1)*(p+2)*(p+9)inta[10];int*p=a;數(shù)組與指針的差異規(guī)則1數(shù)組名指代一種數(shù)據(jù)結構,這種數(shù)據(jù)結構就是數(shù)組;規(guī)則2數(shù)組名可以轉換為指向其指代實體的指針,而且是一個指針常量,不能作自增、自減等操作,不能被修改,但可以參與運算;規(guī)則3指向數(shù)組的指針則是另外一種變量類型(在WIN32平臺下,長度為4),僅僅意味著數(shù)組的存放地址;規(guī)則4數(shù)組名作為函數(shù)形參時,在函數(shù)體內,其失去了本身的內涵,僅僅只是一個指針;字符串與指針字符串定義

char*pName="ZhangSan\n";charstrName[100]="ZhangSan\n";

方式1和方式2都定義了一個字符串兩種字符串定義的區(qū)別char*pName="ZhangSan\n";charstrName[100]="ZhangSan\n";

在有些開發(fā)工具中,pName指向數(shù)據(jù)常量區(qū)域,因此不能通過pName修改其值。修改字符串常量#include<stdio.h>#include<stdlib.h>int

main(int

argc,char*argv[]){char*pName="ZhangSan\n";

puts(pName);pName[0]=‘z’;//運行時出錯

puts(pName);}數(shù)組不能在定義后整體賦值,在定義時可以

charstrName2[100];strName2="ZhangSan\n";

而strName是數(shù)組名稱,指向固定的地址,因此上面給strName2賦值是錯誤的。結構體與指針結構體的地址#include<stdio.h>structdate{

intyear;

intmonth;

intday;};int

main(void){

structdatetoday;

printf("todayaddr:%x\n",&today);

printf("today.year

addr:%x\n",&today.year);

printf("today.month

addr:%x\n",&today.month);

printf("today.day

addr:%x\n",&today.day); return0;}structDate{

intyear;

intmonth;

intday;};structDatetoday;today==&today.year指向結構體變量的指針structdatetoday;structdate*pToday;pToday=&today;可以定義一個指向結構體變量的指針結構體變量.成員名: today.year(*指針).成員名 : (*pToday).year指針->成員名 :

pToday->year4字節(jié)4字節(jié)4字節(jié)structdatetoday;structdate*pToday=&today;yearmonthday......pToday語句pToday->day=12;的執(zhí)行如下:1、根據(jù)pToday的值,找到該地址在內存中的位置;2、根據(jù)pToday的類型,把pToday的值開始到pToday的值+sizeof(*)這一段存儲空間看作一個結構體;3、根據(jù)結構體的定義,得到day成員的偏移地址為+8,找到day成員的存儲區(qū),然后賦值;結構體指針#include<stdio.h>structdate{

intyear;

intmonth;

intday;};voidmain(void){

structdatetoday;

structdate*pToday=&today;

today.day=28;

pToday->month=28;}利用指針可以實現(xiàn)不同數(shù)據(jù)類型(構造型)的轉換整型到字符型類型轉換#include<stdio.h>voidmain(void){

inti=0;

inta=0x31323334; char*ch=(char*)&a;

for(i=0;i<4;i++) {

printf("ch%d=0x%x(%c)\n",i,ch+i,*(ch+i)); }

getchar();整型到字符型類型轉換---運行結果整型到位域的數(shù)據(jù)類型轉換#include<stdio.h>typedefunsignedintUInt32;typedef

struct

{UInt32byte1:8;UInt32byte2:8;UInt32byte3:8;UInt32byte4:8;}rec4Byte;整型到位域的數(shù)據(jù)類型轉換--續(xù)voidmain(void){

inta =0x31323334; rec4Byte*p4Byte=(rec4Byte*)&a;

printf("byte1=0x%x\n",p4Byte->byte1); printf("byte2=0x%x\n",p4Byte->byte2); printf("byte3=0x%x\n",p4Byte->byte3); printf("byte4=0x%x\n",p4Byte->byte4);

getchar();}整型到位域的數(shù)據(jù)類型轉換--運行結果

要把一個字節(jié)轉換為8個二進制位呢?動態(tài)分配內存動態(tài)分配內存(malloc

和free函數(shù))malloc函數(shù)原型:void*malloc(unsigned

int

num_bytes);功能:分配長度為num_bytes字節(jié)的內存塊

說明:如果分配成功則返回指向被分配內存的指針,否則返回空指針NULL。

注意:當內存不再使用時,應使用free()函數(shù)將內存塊釋放。

free函數(shù)原型原型:voidfree(void*ptr)功能:只能釋放使用malloc函數(shù)分配的內存塊

malloc和free使用規(guī)則規(guī)則1不要為了用malloc而用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論