C语言 小知识点

char a = 100; //0110 0100
char b = 200; //1100 1000
char c = a + b; //先扩充(加符号位) 再相加 得到0010 1100
char c = 128; //c=1000 0000=>1111 1111 1000 0000
unsigned char x = 100; //无符号 扩充加0

#define MAX(a,b)((a)>(b)?(a):(b)) //宏参要给括号

#ifndef:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,加上#ifndef宏定义,以避免出现变量重复定义的错误

static:延长局部变量生存期 被static定义的变量存放在数据区 只能被初始化一次
const:定义常变量,只读

enum CType { red = 0,black=1 }; //枚举——直接替换
#define int int* //宏定义——不检查类型 直接替换

char str1[] = { “abcde” }; //len=6
char str2[] = { ‘a’,‘b’,‘c’,‘d’,‘e’ }; //len=5 没有\0 ''只代表单个字符

在一个数组中存放不同类型值
{	
char str[20] = { 0 };
 
int *p1 = (int*)str;	
*p1 = 1234;	
++p1; 
	
float *p2 = (float*)p1;	
*p2 = 12.3f;	
++p2; 	

double *p3 = (double*)p2;	
*p3 = 123.456; 	

char *p = str;	
cout << *(int*)(p) << endl;	
cout << *(float*)(p+4)<< endl;	
cout << *(double*)(p+8) << endl; 	

return 0;
}

const int * const p4 = &a; 如果关键字const出现在 * 左边,表示被指物是常量如果出现在 * 号右边,表示指针自身是常量

Data mydata = { 2001,12,23 }; //花括号初始化只能用于定义

void(int arr[][2], int rows) {} //二维数组做形参 必须写列值

int *p = malloc(sizeof(int)*2);
int *q = calloc(2, sizeof(int)); //在malloc的基础上 进行初始化 全部初始化为零
int *l = realloc(p, sizeof(int) * 2); //指针+空间内存大小 指针可以指向已有地址 尝试在此地址扩展 失败时先将p释放 重新申请内存并将原p中的值复制进去

const int &a = x;//常引用 可以引用 不能改值

常引用可以直接引用常量

指针都是四字节

int ar[10];
ar代表整个数组的情况:

  1. sizeof(ar)
  2. int (&br)[10]=ar;
  3. int(*sr)[10] = &ar;

当且仅当变量生存期不依赖函数时(static) return可以返回该变量的地址

memset(ar,0,sizeof(ar)); //把ar[10]全部初始化为0 括号中的0不能修改 memset是针对字节赋值而不是类型

windows改变字符颜色
#include  
void set_console_color(unsigned short color_index)
{	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_index);} 
int main()
{	
    for (int i = 0; i < 256; i++)	
    {		
        set_console_color(i);		
        printf("%d\t",i);	
    }	
return 0;
}

fclose(fp) 之后必须 fp=NULL 否则会产生失效指针

fwrite(ar,sizeof(int),n,fp); //写入

feof(fp) 测试是否到达文本文件末尾

typedef (编译时进行)把一切合法的变量声明或变量定义类型化
例:
typedef int *PINT;
//PINT可用来定义指针
typedef int arr[10];
arr ar,br;
//ar,br都是十个单位的数组

extern 置于变量或者函数前,以表示变量或者函数的定义在别的文件中

volatile 说明变量在程序执行中可以被隐含地改变

十六进制中的:
0d\r 是把光标置于本行行首
0a\n是把光标置于下一行的同一列

写入文件时 分为两部分 协议栈存放头部信息(类型 数量 时间等基本信息) 另一部分存放数值

布隆筛选:通过一个Hash函数将一个元素映射成一个位阵列(Bit array)中的一个点。这样一来,我们只要看看这个点是不是1就可以知道集合中有没有它了。

常见字符集:
ASCII字符集:主要用于显示现代英语和其他西欧语言,是现今最通用的单字节编码系统(特征:7位(bits)表示一个字符,共128字符,字符值从0到127,其中32到126是可打印字符。)
GB2312字符集:中国国家标准的简体中文字符集(特征:分区表示,双字节表示)BIG5字符集:共收录13,053个中文字,该字符集在中国台湾使用
GB18030字符集:字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字
Unicode字符集:支持现今世界各种不同语言的书面文本的交换、处理及显示(始终使用十六进制数字,而且在书写时在前面加上前缀“U+”)

_exit() 不会处理标准I/O 缓冲区, 如要更新缓冲区请使用 exit()

system(“color 0A”); 其中color后面的0是背景色代号,A是前景色代号

你可能感兴趣的:(笔记,C语言语法基础)