IOS入門教程(三)-C語言特性,ios入門教程-c特性
//3.C語言特性 //3.1函數的定義 //函數傳回型別 函數名(參數){ //dosomthing //}一般的函數定義都是這樣的, //有一種古老的函數定義方式,另外起一行對參數進行說明 void printMesg(msg,loopNum) int loopNum; int msg; { int i; for(i = 0;i<loopNum;i++){ printf("第%d次迴圈%d \n",i+1,msg); } } //3.2函式宣告 //函數的聲明是用於函數的使用在定義之前 int add(int a,int b); //int main(){ // int maxInt = add(3,8); //} int add(int a,int b){ return a+b; } //3.3參數的傳遞,Object-C使用的是值傳遞 void swap(int a,int b){ int temp = a; a = b; b = temp; printf("a的值是%d,b的值是%d",a,b); } //對於指標類型的變數,同樣使用的是值傳遞 /* Draw是一個類 裡面有兩個屬性 int a,int b; void swap(Draw * dw){ int temp = dw.a; dw.a = dw.b; dw.b = temp; } int main (){ Draw dw = [Draw alloc] init]; dw.a = 6; dw.b = 9; return 0; } */ //dw 是一個指標變數,傳遞的時候也是值傳遞,複製的也是指標本身, //但是怪就怪在指標操作的是一個Draw對象,不管哪一個指標,操作的 //都是Draw對象。所以屬性改變是理所當然了 //3.4遞迴函式 //3.5內建函式與外部函數 /* 內建函式:定義時使用了static修飾,只能被當前源檔案中函數調用,所以稱 為內函數 外部函數:定義時使用了extern修飾,或不使用任何修飾符,他可以被任何源 檔案調用,這種函數叫外部函數,一般函數都是外部函數。 *///定義extern函數,省略extern也是允許的 extern printRect(int height,int width){ for(int i=0;i<height;i++){ for(int j=0;j<width;j++){ printf("*");} } } //3.6局部變數與全域變數 //不管什麼變數,只要記住變數的範圍就是在包含它的{}裡面。 //使用extern把變數變成全域變數 extern int globVar; //3.7外部全域變數和內部全域變數 //定義全域變數 int count = 0; //使用外部全域變數 extern int count; //3.8動態儲存裝置與靜態儲存 void fac(n){ auto int a = 1; static int b = 1; a+=n; b+=n; printf("a的值是%d,b的值是%d\n",a,b); } //static可以計算階乘 /* int fci_2(n){ static int f = 1; f= f*n return f; } for (int i = 1;i<8;i++){ fci_2(8); } */ /*3.9預先處理,我個人覺得很重要 1.普通宏 #define PI 3.1415926 2.帶參數的宏 #define AREA(r) PI*r*R 直接使用前面的宏來定義新的宏 需要注意的一些問題是 編譯器只是簡單的替換 比如AREA(10+2)就會出錯 3.使用#ifdef #ifndef #else #endif執行條件編譯 #define iPad #ifdef iPad printf("iPad"); #else printf("iPhone"); #endif 4.使用#if #elif #else #endif #define AGE 20 #if AGE>23 dosomething #elif AGE>20 doOtherThing #esle doSomeThing #endif */ //3.10結構體 struct 結構體類型名{ //成員列表 } struct rect{ int x; int y; int width; int height; }; struct rect rect1; //每次都要加struct太麻煩 #define RECT struct rect //3.10typedef語句,謹慎使用啊! //一般這兩個情況使用能夠帶來好處 struct point{ int x; int y; }; typedef struct point YLPoint; enum season{spring,summer,fall,winter}; typedef enum season YLSeason; //然後就可以使用它們定義結構體變數和枚舉變數了 YLPoint p1; YLSeason s1; //3.11對結構體變數進行初始化 //可以直接對結構體變數進行初始化 //這是正確的 struct rect{ int x; int y; int width; int height; } rect1 = {20,30,100,200}; //這是錯誤的 rect1 = {12,20,20,90}; struct point{ int x; int y; }; typedef struct point YLPoint; //正確的 YLPoint p1 = {20,10}; //錯誤的 p1 = {10,10}; //正確的 p1.x = 10; p1.y = 10; //3.12結構體數組 YLPoint points[] = { {12,10}, {13,20}, {34,89} }; //下面的代碼是錯誤的 points[0] = {12,90}; //正確的寫法 points[0].x = 20; points[0].y = 30; //3.13塊 /* 1.定義塊 //定義不帶參數,無傳回值的塊 void (^printString)(void) = ^(void){ NSLog(@"無傳回值的塊"); }; //定義帶參數,有傳回值的塊,需要注意的是塊裡面只需要參數類型而不需要寫形參 int (^addInt)(int ,int) = ^(int int_a,int int_b){ return int_a+int_b; }; //塊可以訪問局部變數的值但是不可改變 int myInt = 20; void (^printInt)(void)=^(void){ myInt = 30; NSLog(@"myInt的值是多少%d",myInt); }; myInt = 80; printInt();//列印出來的結果是20 注意:系統在定義塊時,會把局部變數的值儲存,而不是等到執行時才去訪問 所以myInt中值修改後,對塊中的myInt沒有影響。 如何解決這個問題?使用_block,這樣塊使用的就是變數本身而非它的值 _block int myInt = 20; void (^printInt)(void)=^(void){ //此處輸出80 NSLog(@"myInt的值是多少%d",myInt); myInt = 30; //此處輸出30 NSLog(@"myInt的值是多少%d",myInt); }; myInt = 80; printInt(); //此處輸出30 NSLog(@"myInt的值是多少%d",myInt); */ //2.複用塊變數類型 typedef void (^YLPrintBlock)(int); YLPrintBlock printInt = ^(int num){ printf(num); } YLPrintBlock printSqrt = ^(int num){ printf(num*num); } //3.直接使用Block作為參數 typedef void (^YLProcessBlock)(int); void processArray(int arr[],int lenth,YLProcessBlock process){ for(int i = 0;i <lenth;i++){ process(arr[i]); } }int main (){ int arr[] = {2,3,4}; //傳入塊作為參數調用processArray processArray(arr,3,^(int num){ NSLog(@"元素的平方是多少%d",num*num); }); //printMesg(3,8); // int a = 6; // int b = 8; // swap(a,b); //printf("a的值是%d,b的值是%d",a,b); int i; for (i=0;i<4;i++){ fac(i); } return 0;}
ios入門教程
你去網上搜各種視頻,論壇看看。千鋒的網上有很多的視頻,從C語言開始,很全面,都看完了對你的協助一定不小
學習iOS開發,怎打好C語言基礎?
藍鷗科技iOS研發中心,憑藉骨幹員工超過10年以上的一線行業開發經驗,在國內外市場上廣泛合作,為眾多世界500強跨國企業共同作業提供移動平台研發和服務,受到了業界的廣泛讚譽。同時,藍鷗擁有多款經典移動平台遊戲和應用產品,在蘋果公司App Store和Google公司Google play上累計發布100餘款熱門 App和遊戲,並被多次評為“精品應用”。 藍鷗在課程的開設中就充分考慮到無編程基礎的同學,因此IPHONE方向開設了72課時的基礎課程《物件導向基礎(OC)》,非電腦專業同學在學習完這兩門基礎課程後就擁有了良好的編程基礎。