随笔分类 -  嵌入式C语言

摘要:在程序中,我们有时需要将一个十六进制字符串转换为十进制数字。比如:char *ptr="0x11";int n=0;//我们想让n等于0x11,即17 通常我们在C中,想将一个字符串转换为一整形数字,通常会使用下面的方法: 但是atoi库函数只能将十进制字符串转化为int整形,比如下面的例子: 所以 阅读全文
posted @ 2019-02-22 15:21 xtusir 阅读(800) 评论(0) 推荐(0)
摘要:#include #include void fun1(int para1,void (*pfun)(int a),int b)//b为pfun的形参 { pfun(b); printf("%d\n",para1); } void fun2(int a) { printf("%d\n",a); } int main(void) { int x = 0x03;... 阅读全文
posted @ 2017-03-02 13:29 xtusir 阅读(442) 评论(0) 推荐(0)
摘要:1、用作函数的返回值,比较常见的是返回分配的堆内存地址。 下面用一个例子进行说明下: 当我们运行这段程序的时候,会发现程序崩溃了,出错的原因是对内存的非法访问,为什么会出现这种情况呢,我们明明已经分配了内存的啊,那我们就进行调试一下,看看问题究竟出现在哪里。 发现调用get_memory函数之后,p 阅读全文
posted @ 2017-03-01 21:35 xtusir 阅读(1492) 评论(0) 推荐(0)
摘要:一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这 阅读全文
posted @ 2016-12-11 13:06 xtusir 阅读(264) 评论(0) 推荐(0)
摘要:在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。 堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的 阅读全文
posted @ 2016-08-05 14:29 xtusir 阅读(448) 评论(0) 推荐(0)
摘要:Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 Container_of的定义如下: #define OffsetOf(type, member) ((unsign 阅读全文
posted @ 2016-07-15 17:50 xtusir 阅读(356) 评论(0) 推荐(0)
摘要:指针也可以指向一个结构体变量。定义的一般形式为: struct 结构体名 *变量名; 前面已经定义了一个结构体 stu: 下面定义一个指向 stu 的指针变量 pstu: 当然在定义结构体的同时也可以定义 pstu: pstu 可以指向结构体变量: 应该把结构体变量的首地址赋给 pstu,而不能把结 阅读全文
posted @ 2016-07-15 13:00 xtusir 阅读(419) 评论(0) 推荐(0)
摘要:许多初学者对C中的void 和void 的指针类型不是很了解。因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧。 1、首先,我们来说说void 的含义: void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 阅读全文
posted @ 2016-07-15 12:36 xtusir 阅读(602) 评论(0) 推荐(0)
摘要:1、typedef可以看作type define的缩写,顾名思义就是类型定义,也就是说它只是给已有的类型重新定义了一个方便使用的别名,并没有产生新的数据类型。typedef的使用与宏定义define有些许的相似,但两者又有以下不同: 1.1.与#define不同,typedef给出的符号名称仅限于对 阅读全文
posted @ 2016-07-15 10:09 xtusir 阅读(1517) 评论(0) 推荐(0)
摘要:c语言条件编译#ifdef与#if defined defined NAME是用来判断NAME是否被定义了(被用define定义了)。 #ifdef NAME == #if defined(NAME) #ifndef NAME == #if !defined(NAME) 但是在处理双重和多重判断时, 阅读全文
posted @ 2016-07-14 09:29 xtusir 阅读(1263) 评论(0) 推荐(0)
摘要:一、柔性数组 今天看了公司的代码,发现一个很奇怪的问题,后来自己写了类似代码,我先把代码贴出来吧。 好奇怪啊,有木有,结构体中竟然定义了一个包含0个元素的数组,当时看到这里就晕晕的。后来查找了资料,才知道这就是传说中柔性数组,柔性数组一般应用在结构体中,数组大小可变的场合中。 我们分析上述程序,da 阅读全文
posted @ 2016-04-08 15:56 xtusir 阅读(1203) 评论(0) 推荐(0)
摘要:(一)结构体指针定义 今天上班写了一段测试代码,结果在linux下编译出现段错误,刚开始一直找不到原因,后来找了度娘才搞懂了。我先贴出来第一次写的代码以及gcc编译器下报的错误: 在linux gcc编译器下编译没有报错但是执行程序出现段错误,报错如下: 我们可以看到程序无法执行,而只定义St Ea 阅读全文
posted @ 2016-04-07 10:40 xtusir 阅读(4549) 评论(0) 推荐(0)
摘要:一、程序运行为什么需要内存?基本概念? 内存是程序运行的立足之地,程序需要用内存来存储一些变量。 内存管理最终是由操作系统完成的,内存在本质上是一个硬件器件,由硬件系统提供;内存由操作系统统一管理,为了管理内存方便,操作系统提供了很多机制来让我们应用程序使用内存。这些机制彼此不同,各有各的特点,我们 阅读全文
posted @ 2016-03-28 22:57 xtusir 阅读(462) 评论(0) 推荐(0)
摘要:一、首先我们从字面意思理解一下什么是指针数组什么是数组指针 1、指针数组:本质是一个数组,数组中的每一个元素是一个指针。 2、数组指针:本质是一个指针,而指针指向一个数组。 二、我们该怎么区分指针数组和数组指针? 1、总共有三种表示形式:int * P[4]和int (*P)[4]和int *(P[ 阅读全文
posted @ 2016-03-28 09:54 xtusir 阅读(910) 评论(0) 推荐(0)