C语言
文章平均质量分 61
C语言知识
kingdix10
这个作者很懒,什么都没留下…
展开
-
【Linux内核】Linux的errno和ERR_PTR、PTR_ERR简介
文章目录1. Linux的errno和指针1.1. 整型和指针类型转换2. C语言中整型数据的存储和数据类型转换原理2.1. 负数的强制类型转换2.2. 强制数据类型降级3. 测试程序3.1. ARM测试结果3.2. ARM64测试结果1. Linux的errno和指针常见的Linux函数返回值类型包括整型和指针,内核中这两种返回值类型的函数会互相调用。Linux的errno为整型,为了与errno对应,Linux将指针分为3种:空指针:NULL,地址为0异常指针:地址空间的高255字节。0xff原创 2022-05-21 12:41:47 · 2044 阅读 · 0 评论 -
【C语言】关于三目运算简化写法 a ? : -1
在阅读U-Boot或Linux内核代码时,经常看到类似return err ? : -EINVAL;的代码,具体是什么意思呢?废话不多说,直接上测试代码。#include <stdio.h>#define __pr(x) printf("%-40s: %d\n", #x, x)int main(void){ int five = 5; int zero = 0; __pr(five ? : -1); __pr(five ? five : -原创 2022-05-17 21:50:29 · 291 阅读 · 1 评论 -
【C语言|结构体】关于结构体初始化赋值
在GUN C中,支持通过标号元素来对指定结构体成员名进行初始化,这允许初始化值以任意顺序出现。在内核中对初始化时有如下代码。其中对进行了两次赋值,第一次是,而最后,又使用宏对其进行了赋值,那结果如何呢?请看如下测试代码:测试结果从测试结果来看,最终结果以最后一次赋值为准。...原创 2022-05-17 22:00:19 · 2018 阅读 · 0 评论 -
【C语言|数组】数组a、&a、&a[0]、&a[0][0]的区别与联系
分别声明一个一维数组和二维数组,查看各个表达式的类型、地址、与首地址的差值,以及内存地址内存储的变量值。数组内变量的低8位记录数组的行号和列号,其中高4位为行,低4位为列。先看一下测试程序给出的结果。一维数组vartypeof(var)(void *)(var)offset*(int *)(var)a1int *0x7ffe2034d2d00x000x00&a1int (*)[8]0x7ffe2034d2d00x000x00&a1[0]int *0原创 2022-05-19 22:11:38 · 7554 阅读 · 0 评论 -
【C语言|函数|数组】多维数组作为函数参数
文章目录1. 方法一:传递数组2. 方法二:数组指针3. 方法三:多重指针4. 数组作为参数时可以用sizeof(a)或ARRAY_SIZE(a)来获取大小吗?1. 方法一:传递数组C语言对多维数组的存储是按照一维数组来处理的,数组的每个维度在内存中按顺序存储。所以将多维数组作为参数传递时,必须指定多维数组子维度的大小,否则函数无法得知每个子维度结束地址。第一维的长度可以指定,也可以不指定。void func1(int a1[], int x);void func2(int a2[][4], in原创 2022-05-19 22:50:10 · 2328 阅读 · 0 评论