freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

p轉(zhuǎn)c語言速成手冊-資料下載頁

2025-08-13 17:15本頁面

【導(dǎo)讀】Pascal轉(zhuǎn)C及DEVC++GDB編譯調(diào)試介紹

  

【正文】 如下: struct 結(jié)構(gòu) 名 { 在此定義若干變量(域) }。 注意花括號后面需要有一個(gè)分號。下面定義一個(gè) date 結(jié)構(gòu): struct date { int year。 23 short month,day。 }。 這樣你就獲得了一個(gè)名為 struct date 的類型名。和變量的定義一樣,一個(gè)結(jié)構(gòu)的定義只能供當(dāng)前函數(shù)(的當(dāng)前語句塊)中后面的部分使用。因此通常把結(jié)構(gòu)的定義放在所有函數(shù)的前面作為一個(gè)全局的定義。之后,你便可以寫這樣的語句: struct date today。 結(jié)構(gòu)的使用方法同 Pascal的記錄類型一樣。例如,下面的函數(shù)用于計(jì)算某一天是星期幾( Zeller 公式): int zeller( struct date t ) { if (3) { = 1。 = + 12。 } int c = / 100。 int y = % 100。 int ans = ( c/4 2*c + y + y/4 + (26*(+1))/10 + 1 ) % 7。 if (ans0) return ans。 else return ans+7。 } 給一個(gè)結(jié)構(gòu)賦初始值和數(shù)組的初始化差不多。下面兩個(gè)語句是等價(jià)的: struct date myBirthday = { 1988, 5, 16 }。 struct date myBirthday = { .year=1988, .month=5, .day=16 }。 這種方法也可以用于程序中的賦值操作,但需要加上一個(gè)類型轉(zhuǎn)換(見這里 的 “ 名詞動(dòng)用 ” 一節(jié))。例如,下面三個(gè)代碼片段都是等價(jià)的: = 1988。 = 5。 = 16。 myBirthday = (struct date){ .year=1988, .month=5, .day=16 }。 myBirthday = (struct date){ 1988, 5, 16 }。 下面的語句調(diào)用了 zeller 函數(shù),輸出自 1583 年來的每個(gè) 13 日都是星期幾。和本文無關(guān)的問題:有人知道為什么我從 1583 年開始算么? int y,m。 for ( y=1583。 y=2020。 y=y+1) for ( m=1。 m=12。 m=m+1 ) printf( %d , zeller( (struct date){y,m,13} ) )。 24 C 語言速成手冊(四):指針、動(dòng)態(tài)內(nèi)存分配、標(biāo)準(zhǔn)輸入 指針的定義 定義一個(gè)指針的方法如下: 類型名 *指針名 。 例如,下面的語句定義了一個(gè)指針: int *pointer。 這樣, pointer 就是一個(gè)指針,它指向的是一個(gè) int 類型的數(shù)據(jù)。 一個(gè)指針可以是一個(gè)合法的內(nèi)存地址,也可以為 0(通常寫成 NULL)。 你可以用 printf 語句輸出一個(gè)指針,對 應(yīng)的標(biāo)識為 %p。下面的代碼可以輸出上面定義的指針指向的地址。 printf(%p,p)。 取地址與引用 假如 a是一個(gè)變量, p 是一個(gè)指針,那么 amp。a返回該變量的地址, *p返回該指針?biāo)傅膬?nèi)容(稱做 “ 引用 ” )。 閱讀下面的代碼片段: int *p。 int a = 520。 p = amp。a。 printf( %p %d\n, p, *p )。 *p = 1314。 printf( %p %d\n, p, *p )。 printf( a = %d, a )。 程序輸出 如下。當(dāng)執(zhí)行了 p=amp。a 后,存取 *p 就相當(dāng)于是存取變量 a了。 0022FF78 520 0022FF78 1314 a = 1314 動(dòng)態(tài)內(nèi)存分配 首先介紹 sizeof 函數(shù)(準(zhǔn)確地說是一個(gè)運(yùn)算符),它的參數(shù)為一個(gè)變量名或類型名,返回的是它所占內(nèi)存空間的大小。下面的代碼輸出 1 8 800 4 1 。 long long a。 double b[100]。 25 _Bool *c。 printf( %d , sizeof(char) )。 printf( %d , sizeof(a) )。 printf( %d , sizeof(b) )。 printf( %d , sizeof(c) )。 printf( %d , sizeof(*c) )。 下面介紹四種動(dòng)態(tài)內(nèi)存分配函數(shù),使用它們前需要在程序最前面包含頭文件 。四種函數(shù)的格式分別為: void *malloc ( size )。 void *calloc ( n, size )。 void free ( pointer )。 void *realloc( pointer, size )。 函數(shù) malloc 將在內(nèi)存里尋找一個(gè)大小為 size 的連續(xù)空間,把分配到的內(nèi)存地址作為一個(gè)指向 void 類型的指針(默認(rèn)的無類型指針)返回。如果空間分配失敗,函數(shù)返回 NULL。 函數(shù) calloc 將在內(nèi)存里尋找一個(gè)大小為 n * size 的連續(xù)空間,并且把這段內(nèi)存的數(shù)據(jù)全部清 0,返回?cái)?shù)據(jù)和 malloc 一樣。如果空間分配失敗,函數(shù)返回 NULL。 函數(shù) free 用于釋放內(nèi)存空間,釋放后的空間被回收,可以用于以后的malloc 或 calloc 操作。 函數(shù) realloc 在保證已有數(shù)據(jù)不變的情況下改變已有指針的 空間大小,返回重新分得的空間的內(nèi)存地址(有可能和原來不同)。如果空間重新分配失敗,函數(shù)返回 NULL。 Pascal 中的 new 語句可以用前兩個(gè)函數(shù)代替, free 語句則相當(dāng)于Pascal 中的 dispose。 注意, malloc 和 calloc 函數(shù)所返回的指針還沒確定類型,理論上需要用類型轉(zhuǎn)換。下面的程序合法地為 p 指針分配空間: int *p。 p = (int *) malloc( sizeof(int) )。 *p = 520。 事實(shí)上,由于賦值時(shí) C 語言自動(dòng)轉(zhuǎn)換類型,因此那個(gè)類型轉(zhuǎn)換是 沒有必要的(去掉 (int *)沒有影響)。 指針與結(jié)構(gòu) 一個(gè)指針可以指向一個(gè)結(jié)構(gòu),一個(gè)結(jié)構(gòu)也可以包含一個(gè)指針。結(jié)構(gòu)里包含一個(gè)指向結(jié)構(gòu)的指針就構(gòu)成了鏈表: struct node{ int value。 struct node *next。 26 } 這樣,定義 struct node *a,則 (*a).next 就是另一個(gè)指向 node 結(jié)構(gòu)的指針。在 C 語言中, (*x).y 的句型很常用,因此有一個(gè)專門的記號 xy 來代替 (*x).y 這樣繁雜的寫法。 你可以從下面的程序中看到鏈表的使用。 include include struct node { int value。 struct node *next。 }。 int main() { struct node *head = NULL。 int i。 for(i=1。i=10。i=i+1) { struct node *newNode。 newNode = malloc( sizeof(struct node) )。 newNodevalue = i。 newNodenext = head。 head = newNode。 } struct node *p = head。 while (p) { printf( %d\n, pvalue )。 p = pnext。 } return 0。 } 指針與函數(shù) 前面說過, C 語言中的函數(shù)參數(shù)和變量 只能夠供該函數(shù)使用。 下面四個(gè)程序代碼的輸出分別是什么? 27 代碼一: include void swap( int a, int b ) { int c = a。 a = b。 b = c。 } int main() { int a = 520, b = 1314。 swap( a , b )。 printf( %d %d, a, b )。 return 0。 } 代碼二: include int a = 520, b = 1314。 void swap( int a, int b ) { int c = a。 a = b。 b = c。 } int main() { swap( a , b )。 printf( %d %d, a, b )。 return 0。 } 代碼三: include int a = 520, b = 1314。 void swap() { int c = a。 a = b。 b = c。 } int main() { swap()。 28 printf( %d %d, a, b )。 return 0。 } 代碼四: include void swap( int *a, int *b ) { int c = *a。 *a = *b。 *b = c。 } int main() { int a = 520, b = 1314。 swap( amp。a, amp。b)。 printf( %d %d, a, b )。 return 0。 } 答案:前兩個(gè)程序輸出 520 1314,后兩個(gè)程序輸出 1314 520。 前兩個(gè)程序中,待交換的兩個(gè)數(shù)(即使是全局變量)作為參數(shù)傳給了swap 函數(shù),該函數(shù)里的操作對函數(shù)外無影響。 第三個(gè)程序中, swap 函數(shù)對全局變量直接進(jìn)行操作,其影響是全局的。 最后一個(gè)程序巧妙地應(yīng)用了指針來實(shí)現(xiàn)兩數(shù)交換。函數(shù)的參數(shù)是指針類型,這個(gè)函數(shù)不能改變指針本身,但可以改變指針?biāo)傅膬?nèi)容。這是寫此類函數(shù)通常所用的方法。 為了強(qiáng)調(diào)函數(shù) void swap( int *a, int *b )中的指針本身不發(fā)生改變,很多地方喜歡寫成 void swap(const int *a, const int *b ) 。 指針與數(shù)組 數(shù)組由內(nèi)存的連續(xù)空間構(gòu)成,因此可以用指針來訪問。事實(shí)上,數(shù)組名本身就是一個(gè)指針。觀察下列代碼: int a[100]。 printf(%p\n, amp。a[0])。 printf(%p\n, a)。 printf(%d\n, a == amp。a[0] )。 printf(%p\n, amp。a[1])。 printf(%p\n, a+1)。 看看輸出結(jié)果(自己運(yùn)行),你會(huì)發(fā)現(xiàn),數(shù)組名其實(shí)就是一個(gè)指向數(shù)組 29 起始位置的指針,其作用相當(dāng)于 amp。a[0]。而指針本身可以進(jìn)行加減運(yùn)算(表示內(nèi)存地址的加減,具體加多少減多少取決于指針?biāo)傅念愋停?,其本質(zhì)是在數(shù)組中進(jìn)行定位。因此,下面的兩個(gè)代碼是完全等價(jià)的: int i, a[100]。 for ( i=0。 i100。 i=i+1 ) *(a+i)=i。 int i, a[100]。 for ( i=0。 i100。 i=i+1 ) a[i]=i。 下面的程序輸出 0 1 2 3 4 0。函數(shù) init 不能改變變量的值,但由于數(shù)組的實(shí)質(zhì)是指針,因此它可以改變數(shù)組所儲(chǔ)存的內(nèi)容。 include void init( int a[5], int b ) { int i。 for ( i=0。 i5。 i=i+1 ) a[i]=i。 b = 5。 } int main() { int i, a[5], b=0。 init( a, b )。 for ( i=0。 i5。 i=i+1 ) printf(%d ,a[i])。 printf( %d\n, b )。 return 0。 } 你甚至可以用指針來創(chuàng)建數(shù)組。使用函數(shù) calloc 可以方便地得到指定長度并已全部初始化為 0的數(shù)組。再加上 realloc 函數(shù)后,你就可以實(shí)現(xiàn)真正意義上的動(dòng)態(tài)數(shù)組(長度可變)。示例程序如下: include include int main() { int i, *a。 a = call
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1