美文网首页
DAY6C语言知识整理(END)

DAY6C语言知识整理(END)

作者: 辞cccc | 来源:发表于2019-08-04 20:39 被阅读0次

    指针

    为什么要用指针

    • 地址 内存空间
    • 解决跨区域(不同作用域 不同代码块)之间的数据交互

    *

    1. 声明定义变量的时候 表示一个指针变量

     `float b = 20;`
     `int c =10;`
     `int *a;`
    

    定义一个指针变量,指向的内存空间只能存放整数
    注意:定义指针变量的时候一定要给初值
    int *a=b;
    不行 指针变量只能存地址,不能存具体值
    int *a=&b;
    不行,整型指针只能存整型数据的地址
    int *a = &c;
    正确
    float *d = NULL;
    NULL指向内存的起始地址 0x00

    2. 除了定义指针变量之外都是访问某个地址的值

        int *temp =&c;//定义指针变量
        *temp = 21;//访问temp地址里面的数据,赋值21
    

    &

    取某个变量的地址

    指针变量本身在内存空间占据8个字节(64位操作系统中)

    int test(void){
    return 0;
    }
    int main(){
    int a=10;
    int *pa=&a;
    int a2[10]= {};
    int *pa2=a2;
    int(*pFunc)(int)=test;
    return 0;
    }
    

    数组和指针

    注意 数组名不是一个变量,未分配内存空间

    • 定义一个数组 系统会分配内存空间 可以存储
    • 定义一个指针变量 只为变量分配八个字节内存空间;无法存值,因为没有为他分配可以存值的内存空间
      如果想给指针指向的区域赋值

    1. 指针变量已经指向某块区域

    int a3 =10;
    int*pa=a3;
    *pa=30;
    

    2. 指针指向一个数组

    int num[10]={};
    int *pnum=num;
    *(pnum+0)=20;
    pnum[0]=20;
    

    3.动态分配内存 malloc realloc free

    上面两种指向的内存都是别人的,希望分配一个属于自己的内存空间
    自己分配的内存空间必须自己释放
    普通变量的内存是系统自己分配的,所以系统负责释放
    malloc() 在头文件stdlib.h中

    char * pname=malloc(3*sizeof(char));
    if(pname == NULL){
    exit(EXIT_FE=AILURE);
    }
    pname[0]='j';
    pname[1]='a'
    pname[2]='c'
    printf("%s",pname)
    
    1. 当之前分配的内存空间不够用了 就需要在之前的基础上重新分配
    2. realloc必须是之前使用 malloc分配过的
    3. 如果是系统分配的内存 是不能使用realloc的
    4. 用完了就要自己释放内存
    pname=realloc(pname,4* sizeof(char));
    pname[3]='k';
    free (pname);
    return 0;
    

    结构体

    一种复合数据类型

    //声明一种类型 struct Person
    struct Person{
    char name[10];
    int age;
    char *addr;
    };
    //定义结构体变量
    struct Person xw;
    xw.name[0] = "x";
    xw.name[1]='w';
    xw.addr = "西南大学"//常量字符串的地址事有系统分配的
    struct Person zs = {"zhangsan",20};
    

    学生管理系统

    文件的操作模式

    1.  r 只读 文件不存在就报错 从头开始读
    2. w  只写 文件不存在就创建 从头开始写
    3. a  只写 从末尾开始写
    4. r+  w+ a+ 可读可写
    
    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
    
        // *
    
        int a = 0;
    
        int *p = &a;
    
        *p = 30;
    
        //8
    
        int num[5] =  {};
    
        num[0] = 1;
    
        int *p1 = num;
    
        *(p1 + 3) = 30;
    
        p1[2] = 2;
    
        int *p2 = malloc(10 * sizeof(int));
    
        p2[0] = 1;
    
        p2[1] = 2;
    
        p2 = realloc(p2, 2 * sizeof(int));
    
        free(p2);
    
        struct Person {
    
            int a;
    
            double age;
    
            char d;
    
        };
    
        struct Person xw = {};
    
        xw.age =20;
    
        //打开文件
    
        //右键 - 运行 - cmd - 终端 - 拖一个文件到终端
    
        //win + r
       FILE *fp = fopen("/Users/pengxiaodong/Desktop/abc.txt", "r");
    
        //写入数据
    
        //音频  视频  图片 -> 二进制数据
    
        //fputs("abc", fp);
    
        struct Student{
    
            char name[10];
    
            int age;
    
        };
    
        //struct Student xw1 = {"xiaowang", 20};
    
        //将结构体写到文件里面去
    
        //fwrite(&xw1, sizeof(struct Student), 1, fp);
    
        //读取数据
    
        //char temp[20] = {};
    
        //fgets(temp, 5, fp);
    
        //printf("%s\n",temp);
    
        struct Student xw1;
    
        fread(&xw1, sizeof(struct Student), 1, fp);
    
        printf("name: %s\n",xw1.name);
    
        printf("age: %d\n", xw1.age);
    
        //关闭文件
    
        fclose(fp);
    
        return 0;
    
    }
    

    体会

    终于要告别c语言了,快乐,指针结构体太烦了。学得头大。

    相关文章

      网友评论

          本文标题:DAY6C语言知识整理(END)

          本文链接:https://www.haomeiwen.com/subject/wzoydctx.html