C语言学习笔记

FILE 结构(包含在stdio.h里)

#ifndef _FILE_DEFINED
struct _iobuf {
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
        };
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

fread

  功 能: 从一个流中读数据
  函数原型: size_t fread( void * buffer , size_t size , size_t count , FILE * stream ); 
  参 数:
  1.用于接收数据的地址(指针)( buffer
  2.单个元素的大小(size) :单位是字节而不是位,例如读取一个int型数据就是4个字节
  3.元素个数( count
  4.提供数据的文件指针(stream)
  返回值:成功读取的元素个数
 

---以下是看郝斌老师的C视频时从视频里摘录下来的一些零碎的知识点。

 一,将一个数以16禁制输出格式:

int var = 16;

printf("#x\n", var); // 打印出0x10

二,指针就是地址,是内存单元的编号。指针变量是存储指针的变量。

指针的重要性(C语言)

1, 可以用来表示一些复杂的数据结构

2, 快速地传递数据

3, 直接访问硬件

4, 使函数返回一个以上的值

5, 能够很方便地处理字符串

6, 是理解面向对象程序设计引用的基础

7, 指针是C语言的灵魂

常见指针错误的一个典型例子:

#include<iostream>

int main()

{
      int i = 5;
      int * p;
      int * q;
      p = &i;
      *q = p;  //类型不匹配,编译会出错(int = int *)
      *q = *p;  //编译会出错,因为没给q赋值,里面存的是垃圾值,垃圾值为地址的单元可能是不能写的
      p = q; //p也会变成垃圾值
      printf("%d\n", *q); //编译出错,因为q为垃圾值,其所指的内存单元不可读

      return 0;
}
三,将一个数组传送给一个函数,则处理函数的形参必须包含数组的地址和长度。

假如有一个数组 int array[4] = {1,2,3,4}; 则求和函数原型可以写成这样:int add(int *p, int len);

四,静态内存和动态内容比较

静态内存是由系统自动分配,由系统自动释放,是在栈内分配的。

动态内存是由程序员手动分配,手动释放,是在堆内分配的。

五,多级指针

int i = 5;

int *p = &i;

int **q = &p;

int ***r = &q;

r = &p; //错误, 因为r是int ***类型,r只能存放int **类型变量的地址

六,已知补码求真值

如果最高位为0,则为正数,其真值等于最高位后面的二进制对应的10进制数。

如果最高位为1,则为负数,其真值可按如下方法来求:

先将所有位取反,然后末尾加1,得到的值为真值的绝对值,在其前面添加一个负号就得到原补码的真值了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值