本篇博客(筆記)主要是根據本身對編程語言和C編程語言的理解,總結複習所創做的,包括簡單的概述和主要的實現代碼。
不一樣於另一篇博客《關於編程.md》中介紹的內容 ,本篇博客主要是代碼乾貨。html
數據表達主要包括:量的概念,數據類型,數據運算,表達式 ,返回值,共5部份內容(目前暫且總結如此)。編程
常量是直接指定的字面量。
示例代碼段:數組
/* *本段程序代理主要在於:量-常量的學習和使用 */ #include<stdio.h> int main(){ printf("I am number:100\n"); //經過printf函數,打印字符串常量,整型常量,轉義字符(字符常量) return 0; }
變量是某塊約定大小(約定大小能夠理解爲數據類型)的內存區域的標籤。
變量=內存區域,變量值=內存存放值,變量地址=內存地址,變量聲明=編譯器開闢內存
取值操做=取內存地址,解引地址=取內存值
示例代碼段:數據結構
/* *本段程序代理主要在於:量-變量的學習和使用 */ #include<stdio.h> int main(){ //整型變量 int int_var_001 = 100; printf("int_var_001 is :%d\n",int_var_001); //字符變量 char char_var_001 = 'A'; printf("char_var_001 is :%c\n",char_var_001); //字符串變量 char * string_var_001 = "liwanliang"; printf("string_var_001:%s\n",string_var_001); return 0; }
編程語言的數據類型均可以分爲兩大類:基本數據類型,擴展數據類型(或者構造數據類型)
同時任何數據都只有兩種表現方式:數,字符,這是數據的基本組成元素。基本元素組成基本數據類型。
C語言基本數據類型包括:整型,字符,字符串,枚舉,空類型編程語言
/* * 本程序段主要打印內置的數據類型,取值範圍,最值等 */ #include<stdio.h> #include<limits.h> #include<float.h> int main(){ printf("----------size------------\n"); printf("1 byte,sizeof(char):%d\n",sizeof(char)); printf("2 byte,sizeofof(short int):%d\n",sizeof(short)); printf("4 byte,sizeofof(int):%d\n",sizeof(int)); printf("4 byte,sizeofof(float):%d\n",sizeof(float)); printf("8 byte,sizeofof(long int):%d\n",sizeof(long)); printf("8 byte,sizeofof(double):%d\n",sizeof(double)); printf("--------max and min------\n"); printf("char max:%d,char min:%d\n",CHAR_MAX,CHAR_MIN); printf("unsign char max:%d,char min:%d\n",UCHAR_MAX,0); printf("short max:%d,short min:%d\n",SHRT_MAX,SHRT_MIN); printf("unsign short max:%d,short min:%d\n",USHRT_MAX,0); printf("int max:%d,int min:%d\n",INT_MAX,INT_MIN); printf("unsign int max:%ld,int min:%ld\n",UINT_MAX,0); printf("long max:%ld,long min:%ld\n",LONG_MAX,LONG_MIN); printf("unsign long max:%lld,long min:%ld\n",ULONG_MAX,0); printf("FLT_MAX:%f,FLT_MIN:%f\n",FLT_MAX,FLT_MIN); printf("DBL_MAX:%f\n,DBL_MIN:%f\n",DBL_MAX,DBL_MIN); return 0; }
/* * 擴展數據類型:數組 * 整型數組的定義,初始化,值運算 * 字符數組和字符串 */ #include<stdio.h> #define SIZE 4 int main(){ //未初始化整型數組 int int_array_001[SIZE]; //初始化整型數組 int int_array_002[SIZE] = {1,2,3,4}; //循環進行數組初始化 for ( int i = 0; i < SIZE; i++ ) { int_array_001[i] = i; printf("int_array_001[%d] is : %d\n",i,i); } //循環輸出數組值 for ( int i = 0; i < SIZE; i++ ) { printf("int_array_002[%d] + 100 = %d\n",i,i+100); } //字符數組 char char_array_001[SIZE] = {'l','i','w','l'}; for ( int i = 0; i < SIZE; i++ ) { printf("%c",char_array_001[i]); } printf("\n"); //字符數組初始化 char char_array_002[SIZE]; for ( int i = 0; i < SIZE; i++ ) { char_array_002[i] = 'A'; printf("char_array_002[%d]:%c\n",i,char_array_002[i]); } //字符串 char *name = "liwanliang"; //printf("%s\n",name); char char_array_003[sizeof("liwanliang")]; //printf("%d\n",sizeof("liwanliang")); for ( int i = 0; i < sizeof("liwanliang"); i++ ) { printf("%c ",*name++); } printf("\n"); return 0; }
擴展數據類型-數組函數
/* * 本代碼段主要學習二位數組 * 主要是整型,字符,字符串型二維數組 */ #include<stdio.h> #define SIZE_C 2 #define SIZE_K 2 int main(){ //int型二維數組,未賦初值 int int_array_001[SIZE_C][SIZE_K]; int i,j; for ( j = 0; j < SIZE_K; j++ ) { for ( i = 0; i < SIZE_C; i++ ) { int_array_001[i][j]=i+j; printf("int_array_001[%d][%d]:%d\n",j,i,int_array_001[i][j]); } } //int型二位數組 printf("\n"); int int_array_002[SIZE_C][SIZE_K] = {{1,2},{3,4}}; int m,n; for ( n = 0; n < SIZE_K; n++ ) { for ( m = 0; m < SIZE_C; m++ ) { printf("int_array_002[%d][%d]:%d\n",n,m,int_array_002[n][m]); } } //char型二維數組,未賦初值 printf("\n"); char char_array_001[SIZE_C][SIZE_K]; int k,t; for ( t = 0; t < SIZE_K; t++ ) { for ( k = 0; k < SIZE_C; k++ ) { char_array_001[k][t] = 'A'+k+t; printf("char_array_001[%d][%d]:%c\n",t,k,char_array_001[k][t]); } } return 0; }
擴展數據類型-結構體學習
/* * 本段代碼主要用於學習結構體的實踐 * 結構體是基於基本數據結構擴展的數據類型 * 由於數組也是數據類型,相互結合就會存在結構體數組和數組結構體的概念 * 結構體實際上至關於本身定義了一個靜態類型數據類型 */ #include<stdio.h> int main(){ /* * 結構體內部只用於定義數據類型,不能初始化 * 定義數據類型知識告訴編譯器其存儲結構 */ struct struct_001{ //ID unsigned int id; //字符串型 char *name; //int型 int age; //字符型 char sex; }; struct struct_001 str_liwl_001 = { 9, "liwanliang", 28, 'M' }; //重命名struct_001數據類型 //typedef struct struct_001 str_001; //聲明變量 //str_001 str_liwl_001; //str_001 str_liwl_001 = { 0,"liwanliang01",28,'M'}; printf("str_liwl_001.id:%d\n",str_liwl_001.id); printf("str_liwl_001.name:%s\n",str_liwl_001.name); printf("str_liwl_001.age:%d\n",str_liwl_001.age); printf("str_liwl_001.sex:%c\n",str_liwl_001.sex); printf("\n"); //結構體數組.其初始化能夠在聲明時進行,也能夠單獨進行(for循環)。 struct struct_001 struct_array_001[3] = {{0,"liwanliang01",21,'M'},{1,"liwanliang02",22,'F'},{2,"liwanliang03",23,'N'},}; int i = 0; for ( i = 0; i < 3; i++ ) printf("%d,%s,%d,%c\n",struct_array_001[i].id,struct_array_001[i].name,struct_array_001[i].age,struct_array_001[i].sex); //結構體元素包括數組,結構體 struct struct_002 { int int_array_001[3]; struct struct_001 struct_liwl_01; struct struct_001 struct_liwl_02[3]; }; struct struct_002 struct_liwl_002 = { {1,2,3},{0,"liwanliang1",21,'M'}, }; printf("%d\n",struct_liwl_002.int_array_001[2]); printf("%d,%s,%c\n",struct_liwl_002.struct_liwl_01.id,struct_liwl_002.struct_liwl_01.name,struct_liwl_002.struct_liwl_01.sex); return 0; }
/* * 本程序片斷主要學習控制結構-條件控制 * 條件控制 * 是對if語句後的(條件)表達式的返回值進行真值判斷,根據不一樣的真值結果執行不一樣的語句模塊 * if 語句的三種模型: * 1.若是,那麼 * 2.如何就,不然就 * 3.嵌套 */ #include<stdio.h> int main(){ //if 基本原理:表達式結果爲真時執行.大可能是條件表達式,不多是量(常量或者變量),或者運算表達式 if ( ! 0 ) //表達式結果非零,執行語句 printf("This line cat be print,because of !0\n"); if ( 0 ) //表達式結果零,不執行 printf("This line can't be print\n"); if ( 1 ) printf("1\n"); //非零值執行 //若是,那麼 | 單條件,單分支 int int_var_001 = 100; //if ( 1 ) if ( int_var_001 > 1 ) printf("int_var_001:%d > 1\n",int_var_001); printf("\n"); //若是就,不然就 | 單條件,雙分支 if ( int_var_001 > 101 ) printf("int_var_001:%d > 101\n",int_var_001); else printf("int_var_001:%d < 101\n",int_var_001); printf("\n"); //若是,就;不然若是,就;不然若是,就;不然,就 | 單條件,多分支 if ( int_var_001 > 50 ) printf("int_var_001:%d >= 100\n",int_var_001); else if ( 50 < int_var_001 < 100 ) printf("50 < int_var_001:%d < 100\n",int_var_001); else if ( int_var_001 >= 100 ) printf("int_var_001:%d >= 100\n",int_var_001); else printf("int_var_001:%d < 50\n",int_var_001); //若是:若是,就:就 | 嵌套 if ( int_var_001 > 50 ) { printf("int_var_001:%d > 50\n",int_var_001); if ( int_var_001 > 80 ) //{ printf("int_var_001:%d > 80\n",int_var_001); //} } else //{ printf("int_var_001:%d < 50\n",int_var_001); //} printf("\n"); /*多個條件的狀況*/ int int_var_002 = 200; int int_var_003 = 300; //若是,那麼 | 多個條件,單分支 if ( int_var_003 > int_var_002 && int_var_001 > 50 ) { printf("int_var_003:%d > int_var_002:%d\n",int_var_003,int_var_002); printf("int_var_003:%d - int_var_002:%d = %d\n",int_var_003,int_var_002,int_var_003 - int_var_002); } //若是就,不然就 | 多個條件,雙分支 if ( int_var_003 < int_var_002 || int_var_001 != 100 ) printf("int_var_003:%d < intt_var_002:%d 或者 int_var_001 = %d\n",int_var_003,int_var_002,int_var_001); else printf("判斷失敗\n"); //嵌套 | 多個條件,多分支 if ( int_var_003 < int_var_002 && int_var_001 == 100 ) printf("首個條件判斷成立\n"); else if ( int_var_003 == 300 && int_var_002 == 200 && int_var_001 == 100 ) printf("第二個條件判斷成立\n"); else printf("判斷失敗\n"); // 三元表達式:等價於雙分支 printf("%d\n",int_var_003 > int_var_002 ? int_var_003 : int_var_002); // swtich語句: 等價於多分支 switch (int_var_003 - int_var_002) { //switch後跟表達式:賦值表達式,運算表達式,條件表達式,邏輯表達式等 case 1: //case是表達式的返回值 printf("1\n"); break; case 10: printf("10\n"); break; case 100: printf("100\n"); break; default: //無匹配值時的默認值 printf("no\n"); } // 條件跳轉和返回 int int_var_004 = 0; int int_var_005 = 5; for ( int_var_004 = 0; int_var_004 < 10; int_var_004++ ) { if ( int_var_004 == int_var_005 ) return; //結束函數,退出(本段代碼會直接跳出主函數,不執行Last line //break; //跳出循環,執行Last line //continue; //跳過本次循環,執行Last line printf("run at:%d\n",int_var_004); } printf("Last line\n"); return 0; }
#include<stdio.h> int main(){ /*for*/ //根據條件遍歷一次 int int_var_001 = 0; for ( int_var_001 = 0; int_var_001 < 10; int_var_001++ ) { //printf("int_var_001:%d\n",int_var_001); printf("int_var_001:%d,是%c\n",int_var_001,int_var_001%2?'A':'B'); } printf("\n"); /*while*/ //先遍歷條件判斷,後操做 int int_var_002 = 10 ; while ( int_var_002 != 0 ) { printf("int_var_002:%d\n",int_var_002); int_var_002--; } printf("\n"); /*do-while*/ //先操做,後遍歷條件判斷 int int_var_003 = 10; do { printf("int_var_003:%d\n",int_var_003); int_var_003--; } while ( int_var_003 != 0 ); return 0; }
/* * 本代碼段主要學習指針內容 */ #include<stdio.h> int main(){ /* *數據類型指針 */ //量 ////常量指針 ////變量指針 //////整型變量指針 int int_a = 100; int *p_int_a = &int_a; //*表示指針的聲明 printf("%d\n",*p_int_a); //*表示解引指針=獲取內存值 //////字符變量指針 char char_a = 'A'; char *p_char_a = &char_a; printf("%c\n",*p_char_a); //////字符串變量指針 char *string_a = "liwanliang"; char **p_string_a = &string_a; printf("%s\n",*p_string_a); printf("\n"); ////數組指針 //////整型數組指針 int array_001[4] = {1,2,3,4}; int *p_array_001 = array_001; //數組名就是數組首地址,也是第一個元素的地址 /*上行代碼等效 int *p_array_001 = &array_001[0] */ printf("array_001[2]:%d\n",*(p_array_001+2)); int i001 = 0; for ( i001 = 0; i001 < 4; i001++ ) //for循環體中只有一行語句時,括號可省略 //{ printf("array_001[%d]:%d\n",i001,*p_array_001++); //*p_array_001++,指針運算,取值後指針+1xsize // printf("array_001[%d]:%d\n",i001,array_001[i001]); //等效於上一行 //} printf("\n"); //////字符數組指針,同上 //////字符串數組指針 char *array_002[3] = {"lwl","liwl","liwanliang"}; char **p_array_002 = array_002; int i002 = 0; for ( i002 = 0; i002 < 3; i002++ ) //{ printf("%s\n",*p_array_002++); // printf("%s\n",array_002[i002]); //等效於上一行 //}; ////二維數組指針 //在二維數組中,一維數組能夠當作是基本數據類型,關係同字符和字符串 /*二維數組須要定義一個指向擴展類型的指針,而不是指向基本數據類型的指針*/ //////整型二維數組 int array_005 [4][4] = {{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}}; printf("%d,%d,%d,%d\n",array_005,&array_005[0],&array_005[0][0],*array_005); //二維數組首地址的四種表示方式 int (*p_array_005)[4] = array_005; //定義一個數組指針(基本數據類型指針,擴展數據類型指針),這裏是擴展數據類型指針-數組指針 printf("%d\n",*(*(p_array_005+3)+1)); int i004,i005 = 0; for ( i004 = 0; i004 < 4; i004++ ) { for ( i005 = 0; i005 < 4; i005++ ) printf("%d ",*(*(p_array_005+i004)+i005)); } printf("---------\n"); //////字符串二維數組 ////結構體指針 struct struct_var_001{ int id; char sex; char *name; }; //定義普通結構體 struct struct_var_001 str_liwl_001 = {1,'M',"liwanliang"}; //聲明結構體變量 struct struct_var_001 *p_str_liwl_001 = &str_liwl_001; printf("%d,%c,%s\n",p_str_liwl_001->id,p_str_liwl_001->sex,p_str_liwl_001->name); //不須要解引符號的取值操做 printf("\n"); struct struct_var_002{ int array_int_002[4]; char array_char_002[4]; }; //帶數組元素的結構體 struct struct_var_002 str_liwl_002 = {{1,2,3,4},{'A','B','C','D'}}; struct struct_var_002 *p_str_liwl_002 = &str_liwl_002; printf("%d,%c\n",p_str_liwl_002->array_int_002[3],p_str_liwl_002->array_char_002[3]); //數組仍是以普通方式索引 printf("\n"); struct struct_var_003{ int array_int_003[4]; int *p_array_int; char array_char_003[4]; char *p_array_char; }; //帶指針元素的結構體 struct struct_var_003 str_liwl_003 = {{1,2,3,4},NULL,{'A','B','C','D'},NULL}; struct struct_var_003 *p_str_liwl_003 = &str_liwl_003; p_str_liwl_003->p_array_int = (int *)&(p_str_liwl_003->array_int_003); //將結構體的第一個元素地址賦值給第二個元素,須要強制類型轉換 p_str_liwl_003->p_array_char = (char *)&(p_str_liwl_003->array_char_003); int i003 = 0; for ( i003 = 0; i003 < 4; i003++ ) printf("%d,%c\n",p_str_liwl_003->p_array_int[i003],p_str_liwl_003->p_array_char[i003]); printf("\n"); for ( i003 = 0; i003 < 4; i003++ ) printf("%d,%c\n",*(p_str_liwl_003->p_array_int)+i003,*(p_str_liwl_003->p_array_char)+i003); ////函數指針 ////指針的指針 return 0; }
參考教程:
http://c.biancheng.net/cpp/html/2930.html
https://blog.csdn.net/jhcconan614/article/category/6486327ui