数据类型和指针
首先都是定义一个变量的数据类型,从右到左判断
int a;a是一个整数 int *a;a是一个指针,指针指向int整数
int **a;a是一个指针,指针指向另一个指针,另一个指针指向int整数
int a[10];带有中括号是标识a是一个数组,数组内都是int整数
int *a[10];右边是中括号,标识a是一个数组,数组内都是指针,指针都指向int整数
int (*a)[10];括号改变优先级,a是一个指针,往右指向一个数组(中括号判断),数组内部是int整数
int a(int b);右边是括号,标识a是一个函数,参数是int,返回是int
int (*a)(int b);括号改变优先级,a是一个指针,右边是括号,标识这个指针指向一个函数,参数int,返回int
int (*a[10])(int b);括号内,a是一个数组,数组内都是指针,指针都指向函数
预编译,展开宏,编译变成二进制,连接多个文件为一个可执行文件
static修饰局部变量,改变的是其存储类型为静态区,静态区有显示初始化data和未初始化的bss
static修饰全局变量,改变的是链接属性,external变internal,别的.o文件无法访问,作用域不变
static修饰函数,改变的是链接属性,external变internal,别的.o文件无法访问,作用域不变
作用域标识符能被访问的代码区域大小
有代码块作用域是大括号,文件作用域是整个文件全局变量或者函数,原型作用域是形参防止内部定义重复导致无效
已经定义的变量无法改变其链接属性,局部变量可以屏蔽全局变量,全局变量extern技术上无必要添加
const只是修改readonly属性,和存储无关
位图操作
#define BIT3 (0x1<<3);static a;
void set_bit3(void){a |= BIT3;}
void clear_bit3(void){a &= ~BIT3;}
直接修改地址
int *ptr;ptr = (int*)0x679a;*ptr = 0x55;
强制类型转换,无符号数的运算优先级要高于有符号数
指针和引用,在数据类型右边是引用int &a = b;在=号右边是取地址int *a = &b;
引用不能为空,指向不能改变,++操作是对变量操作,指针则会改变指向
引用大小是变量大小,指针是一个指针大小
引用不能为空,指针可以为空
引用更加安全
open,popen,fopen
open是unix和linux的标准系统级的输入输出,依赖操作系统,一般打开设备文件,不能移植
popen是在通过fork或者pipe,建立管道,/bin/sh -c执行命令,一般是shell命令行
fopen是将文件读到缓冲区,借助文件结构体指针访问
首先都是定义一个变量的数据类型,从右到左判断
int a;a是一个整数 int *a;a是一个指针,指针指向int整数
int **a;a是一个指针,指针指向另一个指针,另一个指针指向int整数
int a[10];带有中括号是标识a是一个数组,数组内都是int整数
int *a[10];右边是中括号,标识a是一个数组,数组内都是指针,指针都指向int整数
int (*a)[10];括号改变优先级,a是一个指针,往右指向一个数组(中括号判断),数组内部是int整数
int a(int b);右边是括号,标识a是一个函数,参数是int,返回是int
int (*a)(int b);括号改变优先级,a是一个指针,右边是括号,标识这个指针指向一个函数,参数int,返回int
int (*a[10])(int b);括号内,a是一个数组,数组内都是指针,指针都指向函数
预编译,展开宏,编译变成二进制,连接多个文件为一个可执行文件
static修饰局部变量,改变的是其存储类型为静态区,静态区有显示初始化data和未初始化的bss
static修饰全局变量,改变的是链接属性,external变internal,别的.o文件无法访问,作用域不变
static修饰函数,改变的是链接属性,external变internal,别的.o文件无法访问,作用域不变
作用域标识符能被访问的代码区域大小
有代码块作用域是大括号,文件作用域是整个文件全局变量或者函数,原型作用域是形参防止内部定义重复导致无效
已经定义的变量无法改变其链接属性,局部变量可以屏蔽全局变量,全局变量extern技术上无必要添加
const只是修改readonly属性,和存储无关
位图操作
#define BIT3 (0x1<<3);static a;
void set_bit3(void){a |= BIT3;}
void clear_bit3(void){a &= ~BIT3;}
直接修改地址
int *ptr;ptr = (int*)0x679a;*ptr = 0x55;
强制类型转换,无符号数的运算优先级要高于有符号数
指针和引用,在数据类型右边是引用int &a = b;在=号右边是取地址int *a = &b;
引用不能为空,指向不能改变,++操作是对变量操作,指针则会改变指向
引用大小是变量大小,指针是一个指针大小
引用不能为空,指针可以为空
引用更加安全
取地址&,得到的是一个指针,注意指针指向的是一个数据类型,可能是数组哦
int a[5],&a,得到的指针,指向一个5个int的数组,&a+1,就是加了5个int大小哦
int *p = &a;a+1;p+1;都是表示数组的首地址的加减一个int大小
open,popen,fopen
open是unix和linux的标准系统级的输入输出,依赖操作系统,一般打开设备文件,不能移植
popen是在通过fork或者pipe,建立管道,/bin/sh -c执行命令,一般是shell命令行
fopen是将文件读到缓冲区,借助文件结构体指针访问