![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
八五哥
活到老,学到老!
展开
-
KEIL4与KEIL5护眼配色方案
https://download.csdn.net/download/u012780337/19714860?spm=1001.2014.3001.5501原创 2021-06-18 16:02:22 · 1216 阅读 · 0 评论 -
i++与i + 1
#include <stdio.h>int main(void){ char i, j, num, a, b; i = 21; j = 0; a = 0; b = 0; for (num = 0; num < 5; num++) { //i++;先取i 本身的值,再进行求余运算; 再自加,最后赋值;把i % 10的结果赋给i;所以i 一直为0; //单行语句用i++; 表达式用i + 1或者++i; i = (i++) % 10; print.原创 2020-12-21 22:22:00 · 649 阅读 · 0 评论 -
关于类型强制转换
#include <stdio.h>int main(void){ unsigned int i = 0x2345; unsigned char j, t; j = (unsigned char)i & 0x00FF; t = (unsigned char)i >> 8; printf("j = %x\n\r",j); printf("t = %x\n\r",t);}#include <stdio.h>int main(void.原创 2020-12-06 23:30:27 · 463 阅读 · 0 评论 -
C语言简单的面试题
#include <stdio.h>int main(void){ unsigned char p = 0; p++; printf("p = %d\r\n",p); if (++p > 1) { printf("p = %d\r\n",p); p = 1; } p = (p == 1)?(1):(0); printf("p = %d\r\n",p); unsigned char P;.原创 2020-06-11 21:30:30 · 257 阅读 · 0 评论 -
C语言指针难吗?纸老虎而已,纯干货讲解
https://mp.weixin.qq.com/s/VDR92wgSw7Lw-VvVijnN6g转载 2019-12-09 22:55:03 · 333 阅读 · 0 评论 -
关于C语言中不允许在函数外部给全局变量赋值
#include <stdio.h>typedef struct { int r; int t; char y; }Tyep_T; Tyep_T tyep; Tyep_T *ptyep ; /* Tyep_T *ptyep (int a);这种操作属于声明部分不应称为语句,因为它不产生机器操...原创 2019-11-25 22:18:59 · 2572 阅读 · 0 评论 -
为什么一定要对局部变量初始化,希望大家都避免这个错误!
#include <stdio.h>void fun(int a);int main(void){ fun(5); fun(6); fun(7);}void fun(int a){ /*局部变量一定要初始化;因为单片机(系统)每次为它分配的是同一个内存区域, 第一次调用fun()时,a = 5,那么flag = 0x01,此时...原创 2019-10-14 22:13:43 · 1052 阅读 · 1 评论 -
简单函数指针实例
#include <stdio.h>/*简单函数指针实例*/void func1(void){ printf("I am func1.\n");}int main(void){ void (*pFunc1)(); pFunc1 = func1; /*直接引用函数指针名*/ pFunc1();}...原创 2019-08-04 12:29:33 · 145 阅读 · 0 评论 -
简单程序控制块概念说明
/*简单程序控制块概念说明*/#include <stdio.h>#include <string.h>typedef struct tcb{ char *code_name; int p; int v_num; void (*fun)(void);}TCB;/*功能函数1*/void function_1(void){...原创 2019-08-04 12:19:09 · 663 阅读 · 0 评论 -
指针简单应用
#include <stdio.h>typedef struct{ int start; int addr1; int data1; int addr2; float data2; int addr3; float data3; int checknum1; int checknum2; int end;} frame_t;frame_t Frame;...原创 2019-07-01 11:04:47 · 144 阅读 · 0 评论 -
if语句、if...else if语句和switch...case语句的区别和分析
if语句、if else if语句和switch case语句都属于流程控制语句。 在只需要判断一个条件的时候,自然是使用if语句方便有效;但是当判断条件很多的时候,我们可以使用多个if语句或者if...else if语句或者switch case语句。 对于这三者的选择,下面将做一些具体分析;对于后两者的选择,又将涉及到程序执行效率的问题。 if...else if语...转载 2019-07-10 11:19:13 · 1626 阅读 · 0 评论 -
if的非零逻辑判断注意事项
if的非零逻辑判断注意事项原创 2019-02-15 15:30:46 · 1429 阅读 · 0 评论 -
初学者,应该注意的循环(这是一个无限循环)
#include <stdio.h>int main(){ unsigned int a = 10; unsigned int b = 3; while(a) { printf("a=%u\n\r",a); a = a - b; }}在计算机内部,负数是用补码(原码取反加1)表示的!程序中最后会出现...原创 2018-09-06 11:24:56 · 684 阅读 · 0 评论 -
关于C语言中二维数组的P+1与*(P+1)个人浅见
本人第一次在CSDN上发表博客,也是第一次用Markdown来编辑文章,可能会有一些错误,希望各位大神多多指点!好了,闲言少续,我们进入主题:在C语言中,有很多数据类型(Int、Float、Char...),那么数组是一种构造类型的数据,个人认为数组是一组具有相同数据类型的数据集合。目前,我们常见的数组为一维、二维的数组。本文以二维数组为题,首先,我们看一段代码通过代码,我原创 2015-08-24 14:36:03 · 11072 阅读 · 1 评论 -
fgets()与gets()的区别
gets和fgets一些区别总结一下 1、fgets()比gets()安全 为了安全,gets()少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。fgets()会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。2、用strlen()检测两者的输入的字符串长度不一样 get原创 2015-08-25 22:21:11 · 1208 阅读 · 0 评论 -
关于strcmp()函数的实现
#include <stdio.h>#include <stdlib.h>#include <string.h>int cmp(char *p1,char *p2);int main(){ char s1[20],s2[20]; int re; gets(s1); gets(s2); re=cmp(s1,s2); printf("%d\n",re原创 2015-09-25 15:45:58 · 365 阅读 · 0 评论 -
关于C结构体内存分配
有些c语言的题很小,但是我们往往会忽略掉,面试的时候就会出这样的题比如,写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?开始学的时候,也被此类问题困扰很久。其实相关的文章很多,感觉说清楚的不多。结构体到底怎样对齐?有人给对齐原则做过总结,具体在哪里看到现在已记不起来,这里引用一下前人的经验(在没有#pragma p转载 2015-09-30 11:44:56 · 380 阅读 · 0 评论 -
栈内存的临时性不能返回局部变量地址
#include <stdio.h>#include <stdlib.h>int *func(void){ int a=2; //a是局部变量,也叫临时变量; printf("&a=%p\n",&a); return &a; //函数不能返回函数中局部变量的地址,因为函数执行完系统释放局部变量; }void fun1(vo原创 2015-10-01 20:34:23 · 421 阅读 · 0 评论 -
指向指针的指针
#include <stdio.h>#include <stdlib.h>void pointer(int **x);int main(){ int a=10; int *p=&a; pointer(&p); printf("%d",*p); return 0;}void pointer(int **x){ int b=20,*q; q=&原创 2015-09-23 22:09:55 · 343 阅读 · 0 评论 -
#ifndef#define#endif的用法
ifndef#define#endif的用法头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: ifndef <标识>define原创 2016-09-17 11:54:21 · 2392 阅读 · 0 评论 -
关于C语言中的Sizeof()运算符
Sizeof()运算符 简介:使用方法与虽然与函数很像,但是它是C语言中的一个运算符! 作用:用于计算()中变量或者数据类型所占用的内存字节数。原创 2017-01-01 11:43:01 · 607 阅读 · 0 评论 -
关于Const及强制转换
一个简单实例原创 2017-01-01 17:26:57 · 1847 阅读 · 0 评论 -
#define 宏名带参数
C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数,这点和函数有些类似。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为:define 宏名(形参列表) 字符串在字符串中含有各个形参。带参宏调用的一般形式为: 宏名(实参列表); 例如:define M(y) y*y+3*y //宏定义// Code k=M(5); //宏调转载 2017-02-24 11:15:26 · 3935 阅读 · 0 评论 -
字符串指针与字符数组
#include <stdio.h>int main(void){ char *p = "abcdefg"; //用字符指针时,字符串存于常量区 P存储的是字符串的首地址; char a[] = "abcdefg"; //因为char a[] 是在栈中建立的,编译器会为此开辟内存空间,原创 2017-08-30 17:56:27 · 304 阅读 · 0 评论 -
二维数组指针p+1与*(p+1)
先说说a和&a的区别(有三点,三个方向):1.是a和&a的本质,都是什么类型的。2.从2维数组的角度看。3.从指针运算的角度看。声明:虽然数组名不是指针,但是用的很像指针,我们暂且把它叫做一个指针吧。第一个问题:int a[10]; a ,&a和&a[0] 都是分别是什么?先说明a ,&a和&a[0]三个值是的相等哈。a叫做数组名,是数组首元素的地址,转载 2015-08-24 07:21:23 · 4152 阅读 · 1 评论