c语言笔记-1

来源:互联网 发布:淘宝的聚划算是正品吗 编辑:程序博客网 时间:2024/06/15 03:27
#include<stdio.h>//定义常量#define NUM  100//外部变量,在该文件中有用,它的存储周期和static修饰的变量一样,在程序运行的整个过程中都会存在。 int outnum = 100;void main(){    printf("外部变量outnum = %d \n",outnum);    int outnum = 200;//在定一个和外部变量相同的局部变量    printf("在定一个和外部变量相同的局部变量outnum =  %d\n在当前作用域中覆盖了全局变量,在其他的作用域outnum=100\n\n",outnum) ;    //c语言的基本数据类型     //定义常量    #define PI  3.1415926    printf("显示常量: \n%d \n%f \n\n\n",NUM,PI);    //静态局部变量,在程序执行的整个周期都会存在     static int staticnum = 10;     printf("静态局部变量,在程序执行的整个周期都会存在  : %d",staticnum);    //c语言变量//  signed signednum = 1;//  short shortnum = 2;    int intnum = 10;//  long longnum = 100;    float floatnum = 123.2;    char charnum = 'a';    double doublenum = 123.23d;    char charnums[] = "caoxuekun===曹雪坤";    printf("printf('格式串','表达式1','表达式2'...)\n");//  printf("显示int类型的数据 : %d\n",intnum);//  printf("显示int类型的数据 : %d\n",intnum);    printf("显示int类型的数据 : %d\n",intnum);//  printf("显示long类型的数据 : %l\n",longnum);    printf("显示float类型的数据 : %f(默认显示小数点后六位)\n",floatnum);    printf("显示float类型的数据 : %2.3f(保留三位小数的写法%%.3f)\n",floatnum);    printf("显示double类型的数据:%lf\n",doublenum);    printf("显示字符型数据:%c\n",charnum);    printf("显示字符型的数据:%s \n",charnums);    printf("sizeof(类型名)显示如果存储对应类型所需空间大小,返回字节数 : %d \n\n\n\n",sizeof(int));    int i = 0;    float f = 2.3;    char c[]="";    //从终端输入/*    scanf("%d",&i);    scanf("%f",&f);    scanf("%s",&c);    printf("显示输入的值:\n %d \n %.4f \n %s",i,f,c);    char charget = getchar();//从终端输入一个字符付给charget变量    putchar(charget);//显示charget变量 */    //c语言中是没有布尔值,1为真,0为假,故逻辑值常用int类型的值代替     if(1){        printf("c语言中是没有布尔值的 1为真,0为假,故逻辑值常用int类型的值代替 \n");    }    if(1 == 2) {    }else if( 2 == 3) {    }else{        printf("if else if  else...\n\n");    }    //逻辑运算 与 或 非     int bool1 = 1 && 1;    int bool2 = 1 || 0;    int bool3 = !0;    printf("%d  %d  %d\n\n",bool1,bool2,bool3);    //条件表达式 为什么条件表达式不能用在字符串上     int tiaojian1 = (3 > 0) ? 1:2;    char tiaojian2 = (3 > 0) ? 'a':'b';    printf("条件表达式: %d %c \n\n\n",tiaojian1,tiaojian2);     int switchnum = 2;    switch(switchnum){        case 1:            printf("c语言的switch  1");            break;        case 2:            printf("c语言的switch  2 \n\n\n");            break;        case 3:            printf("");            break;        default:            break;    }    int flag = 3;    while(flag > 0){        printf("=======while===========\n");        flag--;    }    printf("\n");    flag = 3;    do{        printf("==========do==while============\n");        flag--;    }while(flag > 0);    printf("\n");    for(flag = 5;flag > 0;flag--){        printf("==========for============\n");        if(flag==2)        break;    }    printf("\n\n\n");    //goto语句格式     /**        goto 标识符;         标识符:代码        goto语句的作用: 从goto对应的位置跳转到对应标识符的位置,顺序的执行程序     */     goto caoxuekun;    caoxuekun:        printf("xxxxxxxxxxxxxxx\n\n\n\n");    //数组    int intarr[] = {3,2,5,7};    int index;    printf("sizeof(intarr):获取intarr占用内存的总长度,单位为字节\n在除以sizeof(int):int类型所占的字节数,故为数组的长度\n");    for(index = 0;index < sizeof(intarr) / sizeof(int); index++){        printf("%d ",intarr[index]);    }    printf("\n\n\n\n");    //方法的调用     test();     //指针     /*     地址的取值范围可能不同于整数的取值范围,所以不能用普通的整数去表示地址      指针变量p存储变量pp的地址的时,我们说p指向pp:指针就是地址,指针变量就是存储地址的变量。     总结:        指针变量的赋值         int *p = 变量地址;        一些等价:             p 等价 变量的地址           *p 等价 变量名      */     int ppp = 230;      //指针变量的申明     int *pp = &ppp;//把变量ppp的地址付给指针变量pp 此时pp指向ppp *pp相当于ppp的别名(*pp==>ppp pp==>&ppp)      int *p = ppp;//把变量ppp的值付给指针变量p      int *q = pp;//pp==》&ppp,所以是将pp所指向的地址(ppp 对应的地址)付给q     int *qq = *pp;//*pp==>ppp所以相当于 int *qq = ppp;      printf("变量ppp在内存中的地址 : %d\n",&ppp);     printf("变量ppp的值 : %d\n",ppp);     printf("变量pp所指向的地址 : %d\n",pp);     printf("指针变量pp的地址 : %d\n",&pp);     printf("指针变量pp所指向地址的值 : %d\n",*pp);     printf("指针变量q所指向的地址 : %d\n\n\n",q);     int pointerIntArr[4] = {1,4,2,7};     int *pia = &pointerIntArr[0];     *pia = 100;//修改数组中下标为0的元素的值      printf("指针指向数组 : %d %d %d %d\n\n",*pia,*(pia+1),*(pia+2),*(pia+3));     //指针遍历数组     for(;pia <= &pointerIntArr[3];pia++) {        printf("指针遍历数组 : %d\n",*pia);     }     printf("\n\n\n");     pia = &pointerIntArr[0];     while(1){        printf("指针遍历数组 : %d\n",*pia++);        if(pia == &pointerIntArr[3]){            printf("指针遍历数组 : %d\n",*pia++);                     break;         }     }//end of while     printf("\n\n\n");     int testarrpoint[10];     *testarrpoint = 100;     *(testarrpoint+1) = 200;     printf("数组名当作指针 :但数组名只能指向下标为0的,\n不能指向其他。如:testarrpoint++ %d %d\n",testarrpoint[0],testarrpoint[1]);    //变长数组 //  testarr(200);    /*        c语言中,字符串使用字符数组存储的,当长度为N的字符串,会转换为长度为N+1的字符数组,末尾用\0结束        eg:"abc"  ==> a b c \0    */     char chararrpointer[] = "abcde";    char *charpointer = &chararrpointer[0];    char *charpointer1 = "caoxuekun";//charpointer1指向字符数组下标为0的字符     printf("\n\n\n");    printf("字符指针对应的数据 : %c\n",*charpointer);    printf("字符指针对应的地址 : %d\n",charpointer);    printf("字符指针与字符串 : %c\n\n\n",*charpointer1);    //字符串如果比申明的要短,则用\0代替    //eg: char data[5] = {'1','2','3'};实际为 '1' '2' '3' '\0' '\0'    //字符串数组 用二维char数组来写字符串      //这个还有点问题?????????????     char stringarr[][2] = {"abc","defg","hij"};    printf("== %c\n",stringarr[0][1]);    printf("==== %c\n",stringarr[1][1]);    printf("字符串 : %s\n\n\n",stringarr[0]);    /*        #include <stdio.h> 指示预处理器打开一个叫做stdio.h的文件,并将该文件加入到当前程序当中         (stdio.h是c语言输入输出的原型)         预处理指令:            宏定义:#define指令定义一个宏 ,#undef指令删除一个宏定义            文件包含 :#include指令指定一文件的内容包含到当前文件当中            条件编译:#if #ifdef,#ifndef,#elif,#else,endif             其他的一些特殊指令用的比较少:#error,#line,#pragma        宏:就是定义一个标识符替代"替换列表"         简单的宏        #define 标识符 替换列表        替换列表可以包括标识符,关键字,数值常量,字符常量, 字符串常量,操作符,排列        带参数的宏 (函数式宏)         #define 标识符(x1,x2,x3....xn) 替换列表         注:在标识符和左括号之间灭有空格,如果有 预处理会认为是一个简单的宏    */    //宏de案例    //宏的参数没有类型,在待用的时候,编译器会检查参数类型是否正确,如果不是,要么转换为正确的类型 ,要么报错     //无法用一个指针来指向一个宏    //宏的替换列表当中有运算符,始终要将替换列表放在()中    //宏有参数,每次出现在替换列表中都要用()     #define max(x,y) ((x) > (y) ? (x):(y))      #define is_even(n) ( (n)%2 == 0)    int testmax = max(3,8);    int testeven = is_even(3);    printf("宏的测试1 : ---> max(3,8) == %d \nis_even(3) == %d \n",testmax,testeven);    //#运算符的作用     #define print_int(n) printf(#n " = %d\n",n);     print_int(8/3);    //#运算符通知预处理器根据print_int的参数创建一个字符串,所以上面的调用会变为    //printf("8/3" " =%d\n",n) ;    //取消宏的定义    #undef print_int     //替换列表中使用 “逗号 ” 来包含一些列表达式     #define SHOW(s) (printf("曹雪坤 %s=====",(s)),test())    SHOW("好帅");    //使用{}来包含复合语句    #define shows() {printf("曹雪坤");printf("好帅啊!!!\n");}    shows();    //c语言中的一些预定义宏    /*        __LINE__        被编译文件中的行号         __FILE__        被编译文件的文件名        __DATE__        编译的日期(mm dd yyyy)         __TIME__        编译的时间(hh:mm:ss)     */     printf("\nc语言中的一些预定义:\n文件名:%s\n行号:%d\n时间:%s %s",__FILE__,__LINE__,__DATE__,__TIME__);    //参数个数可变的宏    //__VA_ARGS__代表省略号对应de参数,是一个特定的标识符     #define testnum(one,...) printf("\n\n参数个数可变的宏:\n参数一:%s\n参数二:%s\n参数三:%s\n\n\n",one,__VA_ARGS__)     testnum("aaa","bbbb","ccc");    /*        条件指令:如果常量表达式的值为1,那么预处理器会保留下面语句的代码 ,否则会删除语句对应的代码(如论如何#if和#endif都会删除)             #if 常量表达式                语句...            #endif     */    #define cao 1    #if cao        printf("常量表达式cao \n");     #endif    #if 1        printf("测试#if 1\n");    #endif     #if 0        printf("测试#if 0");    #endif    //还有一种写法    #if defined(cao)        printf("define cao 会判断cao时候定义,如果定义了返回1,没有定义返回0\n\n\n");    #endif     #if defined(caos)        printf("caos没有定义不会显示");    #else        printf("caos没有定义,故显示这一行\n");    #endif    #if defined(caos)        printf("caos没有定义不会显示\n");    #elif cao        printf("elif cao 定义了cao,所以显示这一行\n");    #else        printf("因为定义了cao,所以没有执行到这一行\n") ;    #endif    /*        条件指令:#ifdef同#if 不过表示符只能使用常量,不能使用1或0             #ifdef 标识符             #endif            #ifndef 标识符没有定义时显示     */    #ifndef caos        printf("没有定义caos这个标识符,故显示这一行\n\n\n") ;    #endif    //其他指令    //#error指令//  Error directive: 消息     //#error 用于生成错误...查看编译的时候输出的错误     #warning 用于生成警告...查看输出的警告    //把 line 的下一行定义为第 1 行,文件名为"a.c"    #line 1 "a.c"}//end of main/*函数 */void test(){    printf("我是一个函数\n"); }//变长数组void testarr(int N){    printf("\n\n\n");    int arr[N];    int i;    for(i = 0;i<=N-1;i++){        arr[i] = i;        printf("数组的值 : %d \n",arr[i]);    }}
原创粉丝点击