指针、数组和引用

本文详细解析了C语言中的数据类型和指针概念,包括不同类型的变量定义、数组与指针的区别、函数指针等核心内容,并介绍了预编译、宏定义等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型和指针
首先都是定义一个变量的数据类型,从右到左判断
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是将文件读到缓冲区,借助文件结构体指针访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值