C语言
文章平均质量分 50
aoxiang_ywj
相互学习相互进步!
展开
-
C语言基础知识:C语言函数调用怎么返回两个值
在C语言中,函数只能返回一个值,要返回两个值,可以改换思路,通过其它方式做到。1 建立数组,返回指针。在要返回的两个值类型相同时,可以用创建数组的方式,将要返回的值存在数组中,并返回数组首地址,这样就可以实现返回两个值的效果。需要注意的是,要返回数组首地址,那么返回的值不可以是局部变量,有如下几种是可以的:a) 使用静态局部变量存储,并返回地址;b) 使用全局变量存储,返回地址;c...原创 2018-09-22 11:45:29 · 40699 阅读 · 0 评论 -
【Linux+C】GCC编译器的结构体对齐指令
gcc推荐的结构体对齐指令 __attribute__((packed)) __attribute__((aligned(n)))举例说明其用法(1) “__attribute__((packed))”使用时直接放在要进行内存对齐的类型定义的后面,然后它起作用的范围只有加了这个东西的这一个类型。packed的作用就是取消对齐访问。#include &l...原创 2018-11-15 10:57:56 · 3917 阅读 · 2 评论 -
【linux+C】restrict关键字用法
c99中新增加了一个类型定义,就是restrict。看了下网上的相关贴子,但还是问题解决的不够。下面是相关一个文章,我将在后面再加相关说明:那么restrict的意义是什么呢?概括的说,关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,...转载 2018-11-17 22:26:44 · 1051 阅读 · 0 评论 -
C语言基础知识:#if 0,#if 1,#else,#endif
在C语言中时常会用到#if 0,#if 1,#else,#endif语句。#if 1 需要编译器编译以下内容;#if 0 编译器不要编译以下内容;用法示例说明:#if 0 code1#else code2#endif【解析】:此时code1的语句被注释掉了,永远没有办法执行,而code2是被编译的; ...原创 2018-12-23 20:54:24 · 3020 阅读 · 0 评论 -
C语言基础知识:While 后面可以没有花括号{}?可以同时有{}和;?
先说结论:正确且习惯用while(){}可以没有{},此时于while()后第一个分号 “;” 前面的语句就是循环体。可以同时有{}和分号“;” , 也就是说,当有花括号 {} 结尾可不需要分号, 当然你加了不也会出错,但不要while();【总结】在C语言中,用;和{}的作用都是一个:用于语句分隔,告诉编译器当语句遇到;或者{}中的 “}”时,说明执行该语句结束。所以说有点二选一的...原创 2019-02-06 23:30:29 · 24057 阅读 · 8 评论 -
C语言基础知识:static静态全局变量?static静态局部变量?static函数?
从网络资源整理的static的三个作用第一个作用:对其他文件隐藏。所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问.如果加了static,就会对其它源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。...原创 2019-02-09 22:25:34 · 591 阅读 · 0 评论 -
C语言基础知识:字符数组用字符串赋值
问题提出:char a[10]; 怎么给这个数组赋值呢?字符数组用字符串赋值的三种可行形式:1、定义的时候直接用字符串赋值 char a[10]="hello";【注意】不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的,一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!再如char a[10]; a="hello";//这种情...原创 2019-08-16 11:28:11 · 4832 阅读 · 0 评论 -
C语言基础知识:ltoa函数和atoI函数和sprintf函数
目录1、ltoa函数和atoa函数2、sprintf函数3、sprintf函数与printf函数简单对比:4、同时用到ltoa函数和sprintf函数的例子5、延伸学习:C/C++语言中任意数据类型与字符串转换的几个标准库函数5.1. int/float to string/array:5.2. string/array to int/float今天看C语言SCI_...原创 2019-08-22 21:11:47 · 1902 阅读 · 0 评论 -
C语言基础知识:do while用法理解
do while语句与while类似,do while语句也同样是用于完成程序循环的一种方式,它的基本用法如下:do{ //循环体}while (条件表达式);注意:do while语法与while有一些类似,也有一些不同,类似的地方是它同样有循环体和条件表达式,但执行顺序与while不同,do while是先执行一次循环体之后再进行条件判断。注意,在do wh...原创 2018-10-26 22:58:04 · 9414 阅读 · 0 评论 -
C语言基础知识:typedef关键字及其与#define的区别
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://mp.csdn.net/postedit/83154590、1、typedef是什么?typedef是C语言中一个关键字,作用是用来定义(或者叫重命名类型);百度百科:typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,它与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mu...原创 2018-10-18 23:10:52 · 443 阅读 · 0 评论 -
C语言基础知识:指针操作
概述:主要讲述指针的递增、递减、加法(指针加上整数)、减法(指针减去整数)和指针相减下面描述指针变量的基本操作,通过程序来说明/*定义一个数组和5个指针*/int urn[5] = {100, 200, 300, 400, 500}; int *ptr1, *ptr2, *ptr3, *ptr4;1.赋值可以把地址赋给指针。例如用数组名、带地址运算符&的变量名、另...原创 2018-09-18 16:29:39 · 718 阅读 · 0 评论 -
C语言基础知识:*p++与*++p;(*p)++ 与 ++(*p)的理解
首先查看C语言运算符优先级表,可以看到++和指针的*号运算优先级都是第二级。结合方向都是“右到左”*p++:等同于:*p; p += 1;解析:由于*和++的运算优先级一样,且是右结合。故*p++相当于*(p++),p先与++结合,然后p++整体再与*结合。前面陈述是一种最常见的错误,很多初学者也是这么理解的。但是,因为++后置的时候,本身含义就是先运算后增加1(运算指的是p...原创 2018-09-18 18:14:50 · 13928 阅读 · 7 评论 -
C语言基础知识:checksum += (0x000000FF) & *a++; 以及 *( (unsigned int *)a ) = checksum; 的理解
如对*p++与*++p熟悉建议:先阅读《关于C语言中*p++与*++p;(*p)++ 与 ++(*p)的理解》:https://mp.csdn.net/postedit/82761455checksum += (0x000000FF) & *a++; 的理解a = Buf + SPL_HEADER_SIZE; for(i = 0, checksum = 0; i <...原创 2018-09-18 18:37:07 · 905 阅读 · 0 评论 -
C语言基础知识:#if 0 或 #if 1(C语言注释)
C语言注释有三种方法常见的方法有:1)单行注释: // 2)多行注释: /* */今天我想和初学者来聊聊一种相对不那么熟悉的C语言注释方法:利用条件编译注释代码。3)#if 0 或 #if 1注释:当屏蔽掉大块代码时,使用"#if 0"比使用"/**/"要好。(因为用"/**/"做大段的注释时,需要防止被注释掉的代码段中有嵌...原创 2018-09-23 15:22:59 · 10411 阅读 · 0 评论 -
C语言基础知识:访问内存地址的方法
汇编语言寄存器间接寻址方法#define GPJ0CON 0xE0200240ldr r0, =GPJ0CON //把地址值赋给寄存器r0,从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断这个数ldr r1, =0x11111111 //将设定的数暂存到寄存器r1中str r1, [r0] //寄存器间接寻址。功能是把r1中的数写入到r0中...原创 2018-09-22 11:38:50 · 16653 阅读 · 0 评论 -
C语言基础知识:a a[0] &a &a[0]
一、解析为什么p = a;或者p = &a[0]时类型匹配,p = &a;类型不匹配?int *p;int a[10];P = a; //a做右值表示数组首元素的首地址,【a做右值等同于&a[0];】;类型匹配,左右两边都是int *型p = &a; //类型不匹配。原因:p是int * (int类型的指针),而&a是int (*)[10...原创 2018-10-18 17:10:54 · 12972 阅读 · 0 评论 -
C语言基础知识:函数指针&指针函数(定义格式、作用及用法说明)
版权声明:本文为博主原创文章,未经博主允许不得转载。https://mp.csdn.net/postedit/83150266一、函数指针的实质(还是指针变量)1、函数指针定义格式:类型名 (*函数名)(函数参数列表);int (*pfun)(int, int);2、函数指针的定义、赋值、调用void func1(void) //定义一个函数,以方便下面定义函...原创 2018-10-18 18:22:34 · 36187 阅读 · 3 评论 -
C语言基础知识:【函数指针】调用strcpy函数
函数指针作用:函数指针有两个用途:(1)调用函数;(2)做函数的参数.下面介绍一下用【函数指针】来调用strcpy函数,并分析其中的三个疑问。char a[5] = {0};char* (*pFunc)(char*, const char*); //因为strcpy是一个指针,故要用(*pFunc)//char *pFunc(char*, const char*); ...原创 2018-10-18 22:41:55 · 1531 阅读 · 0 评论 -
C语言基础:char *p = str(str为数组名); 与 char *p = &a(a为变量名);
【前言】将指针变量名与数组名绑定时,以及将指针与普通变量名绑定时,有个小细节要注意。那就是区分a,&a[0],&a做右值时的区别,特别是在给指针变量赋值时,捋清楚何时需要取地址符号&a 和 &a 做右值时的区别:&a是整个数组的首地址,而a是数组首元素的首地址。两个在数值相等但意义不同a 和 &a[0]做右值时意义和数值完全相同,...原创 2019-08-28 21:14:12 · 8104 阅读 · 0 评论