zoukankan      html  css  js  c++  java
  • 010_stdc_C语言

    回顾:

    变量的作用域和生命周期

    局部变量

        全局变量   

    静态变量(局部的特性,全局的生命周期)
    静态局部变量
    静态全局变量

    指针,
    指针变量

        通过指针变量  间接访问 它指向的变量

        int * pa

    指针运算
    pa+1;
    pa-1;
    pa>pb
    pa++;
    pb--;

    指针变量和数组
    数组名可以通过+地址偏移的方式 取数组元素
    也可以对指针变量通过下标[n] 取地址偏移的值

    --------------------------

          const  constant  --> 永恒的 ,只读的

      1.const  修饰普通变量

        const int i = 0;   //声明变量i 并且i只读

          指针变量 和数组的区别

          指针变量与数组第一个区别: 数组名  是一个常指针 

    int * const pb = &b;  //pb 永远指向b, pb 声明为只读
    int b=3;
    int * const pb = &b;//pb 永远指向b, pb 声明为只读
     
    const int * pb = &b; //pb指向变量的值不可修改
                             //不能通过pb 间接修改 b的值
    
    
    const int * pb = &b; //pb指向变量的值不可修改
    作用 : 防止通过指针变量 修改 指向变量的内容
     *           仅用于读指向的内容
     
        int const * pb = &b; //pb指向变量的值不可修改,跟上面代码同
        const int * const pb = &b;指向不可修改,指向的变量不可修改
     
    /*
     * 数组名 和指针的区别
     *     1. 数组名 是常指针,不可修改
     *     2. sizeof 计算数组名 为数组的所有字节数
     *        sizeof 计算指针变量 为机器字宽度
     *     3. 指针可以作为 函数的返回值类型,数组不行
     */

    -------------
    字符串

    字符 char c;

      c 没有字符串类型   c++  string

    在c语言中 由一串字符+ 一个字符串
    == 0

    表示结束掉一个字符串的结束符号
     

    字符串在程序中的表示形式
    字符串常量 字符串字面值
    "hello world!"

            字符指针   char *pc;

    char *str ="abcdef"; //将字符串常量的地址赋值给字符指针str
        //str 指向字符串起始位
        printf("%c
    ",*str);
    //a

    不可通过指针修改字符串如 //*str = 'A'; 

    字符数组   char  a[13];
                字符数组存放比字符个数至少多一个

    /*
     * 字符串 输入输出
     */
    #include <stdio.h>
    int main(){
        char *str ="abcdef";
        char a[13]="hello world!";
        printf("str = %s
    ",str);
        printf("a = %s
    ",a);
        getchar();
        return 0; 
    }
    str = abcdef
    a = hello world!
    //初始化 系统会加

    s%读到 才结束读

    #include <stdio.h>
    int main(){
        char a[13]="hello world!"; //初始化 系统会加
        char *str = a;
        scanf("%s",str); // 
        printf("str = %s
    ",str);
        return 0; 
    } 
    ssssss
    str = ssssss
    scanf("%s",a); // 输入字符串 遇到有 空格 或者 回车会结束
    解决:
    gets(a); //不要超过数组长度
    #include <stdio.h>
    int main(){
        char a[13]="hello world!"; //初始化 系统会加
        char *str = a;
        gets(a); //不要超过数组长度
        printf("str = %s
    ",str);
        getchar();
        return 0; 
    } 
    /*
     * 字符串 "赋值"
     */
    #include <stdio.h>
    int main(){
        char *pa = "hello world!";
        char *pb = NULL;
        printf("pa = %s
    ",pa);
        getchar();
        return 0; 
    }

    char a[20] = {"0"}; //20元素都是0

    #include <stdio.h>
    int main(){
        char a[20] = {"0"};
        char *pa = "hello world!";
        int i = 0;
        while(pa[i])
        {
            a[i]  = pa[i];
            i++;
        }
        printf("pa = %s
    ",a);
        getchar();
        return 0; 
    }

             字符串的操作

    字符串的操作
    strcpy 复制第二个参数内容到
    strncpy 复制第二个参数内容指定的个数

    strcpy(a,pa); //将pa指向的字符串 赋值到a数组
    #include <stdio.h>
    #include <string.h>
    int main(){
        char a[20] = {"0"};
        char *pa = "hello world!";
        strcpy(a,pa); //将pa指向的字符串 赋值到a数组
        printf("pa = %s
    ",a);
        getchar();
        return 0; 
    }
    #include <stdio.h>
    #include <string.h>
    int main(){
        char a[20] = {"01234567899abcdef"};
        char *pa = "hello world!";
        strcpy(a,pa); //将pa指向的字符串 赋值到a数组
        printf("pa = %s
    ",a);
        printf("--------------
    ");
        for(int i = 0;i<20;i++)
        {
            printf("%c",a[i]);
        }
        printf("
    ");
        getchar();
        return 0; 
    }

    第一次输出是因为把前一个字符串的 也复制过去了,输出函数执行到 结束,所以打印输出是

    hello world!

    第二次则输出全部的字符(修改过的和还未被修改到的)

    hello world! cdef

             strcmp    字符串比较

    //pa == pb 返回 0
    //pa > pb 返回 1
    //pa < pb 返回 -1

    #include <stdio.h>
    #include <string.h>
    int main(){
        char *pa = "abcd";
        char *pb = "ABCD";
        int a = strcmp(pa,pb);  //pa == pb 返回 0
        //pa > pb  返回 1
        //pa < pb  返回 -1
        printf("a = %d
    ",a);
        getchar();
        return 0; 
    }
    //a = 1
    /*
     * 字符串比较运算   > < =
     *  strcmp
     *  [练习]
     *     1.在主函数中声明一个 passwd 字符数组,用来存储用户的密码.
     *     char passwd[12] = {0};
     *
     *     2.编写一个void setPasswd(char *passwd);
     *     传入的参数 是主函数中保存密码的字符数组passwd
     *     功能  设置用户密码
     *
     *     3.编写一个int login(const char *passwd)
     *           传入的参数 char *passwd  是主函数保存密码的数组
     *           功能   三次输入机会  输入正确返回1
     *                   错误返回 0
     *     4.主函数 先调用设置密码的函数
     *              再调用登录login函数
     */
    #include <stdio.h>
    #include <string.h>
    void setPsd(char *passwd){
        printf("请设置密码:
    ");
        scanf("%s",passwd);
    }
    int lonin(const char *passwd){
        char c[] = {0};
        for (int i=2;i>=0;i--)
        {
            printf("请输入密码:
    ");
            scanf("%s",c);
            if (strcmp(c,passwd) == 0)
            {
                return 1;
            }
            printf("您还有%d次机会!
    ",i);
        }
        return 0;
    }
    int main(){
        char passwd[]=" ";
        setPsd(passwd);
        printf("密码是:%s
    ",passwd);
        if (lonin(passwd))
        {
            printf("登录成功!
    ");
        }
        getchar();    
        getchar();
        return 0; 
    }
    //char *input; //指针变量  指向不确定,有可能执行 当前进程其他内存位置,导致系统不安全
     //char *input=NULL; //指针变量 赋值为NULL  指向0地址 0地址不可用,通过段错误可以结束程序
     //input 一定要指向一块有效的内存 -->局部变量 全局变量  
    #include <stdio.h>
    #include <string.h>
    void setPsd(char *passwd){
        printf("请设置密码:
    ");
        scanf("%s",passwd);
    }
    int lonin(const char *passwd){
        char a[]={0};
       char *input = a;
        for (int i=2;i>=0;i--)
        {
            printf("请输入密码:
    ");
            scanf("%s",input);
            if (strcmp(input,passwd) == 0)
            {
                return 1;
            }
            printf("您还有%d次机会!
    ",i);
        }
        return 0;
    }
    int main(){
        char passwd[]=" ";
        setPsd(passwd);
        printf("密码是:%s
    ",passwd);
        if (lonin(passwd))
        {
            printf("登录成功!
    ");
        }
        getchar();    
        getchar();
        return 0; 
    }

    管理系统

    #include <stdio.h>
    #include <string.h>
    void setPsd(char *passwd){
        printf("请设置密码:
    ");
        scanf("%s",passwd);
    }
    int lonin(const char *passwd){
        char a[]={0};
        char *input = a;
        for (int i=2;i>=0;i--)
        {
            printf("请输入密码:
    ");
            scanf("%s",input);
            if (strcmp(input,passwd) == 0)
            {
                return 1;
            }
            printf("您还有%d次机会!
    ",i);
        }
        return 0;
    }
    int main(){
        char passwd[]=" ";
        int flag = 1;
        while(flag){
        printf("+------------------+
    ");
        printf("|      登录菜单    |
    ");
        printf("+------------------+
    ");
        printf("|                  |
    ");
        printf("|   1.设置密码     |
    ");
        printf("|   2.登录系统     |
    ");
        printf("|   0.退出系统     |
    ");
        printf("|                  |
    ");
        printf("+------------------+
    ");
        printf("选择您的操作:"); 
        int cmd = 0;
        scanf("%d",&cmd);
        switch(cmd)
        {
            case 1: 
                setPsd(passwd);
                break;
            case 2:
                if (lonin(passwd)) //1
                {
                    //登录成功的代码
                    printf("登录成功
    ");
                }
                else
                {
                    printf("密码错误,登录失败
    "); 
                }
                break;
            case 0:
                printf("退出系统
    ");
                flag = 0;
                break;
            default:
                printf("操作数错误
    ");
                break;
        }
      }
        getchar();    
        getchar();    
        return 0; 
    }

     strlen    计算字符串的长度 也就是字符个数

    strcat    连接字符串

     memset    内存清0

    /*
    * strlen 计算字符串长度
    * 只打印字符的个数,不包括
    *
    * 谈一谈 strlen 和 sizeof 的区别
    */

    #include<stdio.h>
    #include <string.h>
    
    int main(){
        char * str = "hello world!";
        printf("strlen(str) = %d
    ",strlen(str));
        getchar();
        return 0;
    }
    //12
    /*
     * strcat 将第二个参数的字符串 连接到第一个指针指向的内存中
     */
    #include<stdio.h>
    #include <string.h>
    
    int main(){
        char pa[20]="hello";
        char pb[] = "world";
        strcat(pa,pb);
        printf("pa = [%s]
    ",pa);
        getchar();
        return 0;
    }

    中间加空格

    #include<stdio.h>
    #include <string.h>
    
    int main(){
        char pa[20]="hello";
        char pb[] = "world";
        strcat(pa," ");
        strcat(pa,pb);
        printf("pa = [%s]
    ",pa);
        getchar();
        return 0;
    }

     memset    内存清0

    #include<stdio.h>
    #include <string.h>
    
    int main(){
        char pa[50]="helsdsdsdsdsdsdsdlo";
        char pb[] = "world";
        strcat(pa," ");
        strcat(pa,pb);
        printf("pa = [%s]
    ",pa);
        memset(pa,0,20);  //对pa的20个元素设置为0
        printf("pa = [%s]
    ",pa); 
        getchar();
        return 0;
    }

     

    [练习]
    输入一个数字字符串 比如:"102" ==>102
    "12a3" ==>12
    将该字符串 转换为一个十进制数102

    char *pc = "123";
    int a = 0;
    while(*pc>='0'&& *pc<='9')
    {
      a =a*10;
      a += *pc - 0x30;
      pc++;
    
    }
    何所为,不仅仅是一种态度,更是一种艺术!
  • 相关阅读:
    支付宝接口相关整理
    诡异的 &quot;password取回&quot; 邮件问题
    剑指 offer代码解析——面试题39推断平衡二叉树
    女程序猿做了个梦,各路大神惊现神级评论!
    Mac: Android studio+VirtualBox+Genymotion
    lua 中pairs 和 ipairs差别
    機器學習基石 (Machine Learning Foundations) 作业1 Q15-17的C++实现
    怎样获取HTML5视频的持续时间
    Android之本地相冊图片选取和拍照以及图片剪辑
    19_Android中图片处理原理篇,关于人脸识别站点,图片载入到内存,图片缩放,图片翻转倒置,网上撕衣服游戏案例编写
  • 原文地址:https://www.cnblogs.com/tanzizheng/p/12907392.html
Copyright © 2011-2022 走看看