美文网首页
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)

    指针 为什么要用指针 地址 内存空间 解决跨区域(不同作用域 不同代码块)之间的数据交互 * 1. 声明定义变量的...

  • 2018 前端面试准备

    前端面试常见问题按知识点分类整理 前端面试常考问题整理,按模块知识点分类,持续完善中... Front-end-D...

  • 综述

    整理数据结构知识 用不同语言实现数据结构

  • Javascript 基础干货大全

    汇总整理大前端 Javascript 基础干货大全 END

  • go语言基础知识整理

    http://47.101.52.166/blog/back/go/day1.html

  • c也有内存管理

    C语言知识整理(3):内存管理(详细版) - mattran - 博客园https://www.cnblogs.c...

  • c语言知识点整理-1

    简单的把我最近两周学习的嵌入式c语言基础编程32个知识点串联下,能举例子体会的我不会啰嗦的,直接干货。不清楚的可以...

  • Python基础知识

    Python:动态解释型语言,C语言开发,无分号、begin、end标记,31个保留字,强类型语言。 文件类型:源...

  • 编译原理

    1. 编译过程概览 Front End:用于确定程序含义的步骤 Back End:构造等价目标语言的步骤 Pass...

  • 整理语言

    我需要去歌颂吗? 用你哄骗众人的嗓音 猩红月下的答案 我只是个机械人偶 遵从指令寻找主人 你呢?主宰你的人生。 你...

网友评论

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

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