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
---以下是看郝斌老师的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,得到的值为真值的绝对值,在其前面添加一个负号就得到原补码的真值了。