当前位置:网站首页>【C language】动态数组的创建和使用
【C language】动态数组的创建和使用
2022-08-09 11:03:00 【XV_】
在C语言中,使用malloc
函数创建动态数组,使用一个指针指向它,使用下标进行访问。
unsigned long *a = (unsigned long *)malloc(2 * sizeof(int));
a[0] = 1000;
a[1] = 2000;
printf("%d %d\n", a[0], a[1]);
free(a);
上述例子,申请了两个int空间的动态数组,使用int *
指向它,使用a[0],a[1]
访问,这与数组访问一样,区别就是动态申请内存在堆空间,还需要使用free
进行释放,而一般的数组在栈空间,自动释放。
这个很容易,这里想延申类比一下,这是Liunx 0.11内核类似的一段代码很有趣。
#include <stdio.h>
#include <stdlib.h>
typedef struct desc_struct
{
unsigned long a, b;
}
desc_table[256];
desc_table idt, gdt;
void set_gate(unsigned long *gate_addr) {
gate_addr[0] = 100;
gate_addr[1] = 200;
}
int main() {
int size = sizeof(idt) / sizeof(idt[0]); // size = 256
printf("%d\n",size);
printf("%d %d\n", idt[0].a, idt[0].b);
set_gate((unsigned long *)&idt[0]);
printf("%d %d\n", idt[0].a, idt[0].b); // 输出 100 200
return 0;
}
这个例子比较奇怪,奇怪在结构体的访问上。
main
函数调用了set_gate
函数,并且将idt[0]
的地址作为参数传了过去set_gate
函数获取了idt[0]
的地址之后,直接使用下标去访问结构体内的两个变量
我们知到,一般结构体变量是使用.
,结构体指针使用->
访问,这种使用下标的挺诡异的,我们分析一下。
- 结构体内的两个变量是连续的,都是
unsigned long
类型 - 现在有一个
unsigned long*
指针指向了结构体内第一个变量(默认指向开头)
我们可以看到,对于这种模式,不就是动态数组嘛,它们的形式是一样的,访问的时候,a和b可以通过指针的下标访问。
另外就是,由于获取的是指针,也就是地址,而且还不是结构体指针,而是与结构体内元素类型一致的指针,所以,也没有办法通过结构体的方式访问。
从底层来说,这种方式是可行的!需要明白,传参之后,结构体其实在函数set_gate
中是看不见的,是消失的。
边栏推荐
- 解决1.tensorflow运行使用CPU不使用GPU 2.tensorflow环境下的GPU版本号 3.tensorflow和cuda以及cudnn版本对应问题 4.查看cuda和cudnn版本
- Netscope: Online visualization tool for neural network structures
- Antdv+Asp.net WebApi开发学生信息管理系统(一)
- 剖析STM32F103时钟系统
- 如何在gazebo进行 joint的转动控制
- 性能测试(04)-表达式和业务关联-JDBC关联
- PTA 换硬币
- golang 标准库json Marshal、Unmarshal坑
- 详细的np.matmul / np.dot / np.multiply / tf.matmul / tf.multiply / *
- 中断系统结构及中断控制
猜你喜欢
matlab图像分割,从基因芯片荧光图像中提取阴性点(弱)和阳性点(强)
vite的原理,手写vite
PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization论文阅读
聚类了解
性能测试(03)-JDBC Request
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
Netscope: Online visualization tool for neural network structures
FreeRTOS任务创建源码分析
CentOS6.5 32bit安装Oracle、ArcSde、Apache等配置说明
C语言统计不同单词数
随机推荐
PTA习题 阶梯电价(C)
People | How did I grow quickly from programmer to architect?
Missing URI template variable ‘employeeNumber‘ for method parameter of type String
faster-rcnn中的RPN原理
OpenSSF's open source software risk assessment tool: Scorecards
华为VRRP+MSTP联动接口检测实验案例
获取指定年度所有周的工具类
prometheus接入mysqld_exporter
margin出bug---margin失效
中断系统结构及中断控制
C语言数组题_校门外的树_标记法
性能测试(06)-逻辑控制器
Error: Cannot find module ‘./application‘
MATLAB中如何把cftool拟合的函数输出到命令行(解决如何导出拟合后的曲线数据)
激光条纹中心提取——Steger
Tensorflow realize parameter adjustment of linear equations
在线编译matlab,亲测好用
二叉树 前序是根在前(根左右)中序(左根右)
微信小程序——天气查询
pip common commands and changing source files