自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

转载 时钟

1、系统时钟SYSCLK在STM32F407中,除了一些特定的时钟(例如,USB OTG FS时钟,I2S时钟)外,系统所有外设的时钟均是通过SYSCLK来提供的。也就是说我们经常用到的外设时钟,都是通过SYSCLK分频得到的。下面是和SYSCLK相关的时钟树的图。由图中可以看到,SYSCLK的来源主要有三个。l  HSI 振荡器时钟l  HSE 振荡器时钟l&...

2018-11-28 20:46:21 743

原创 typedef的使用

typedef的使用#include <stdio.h>struct Test{ int a;};//定义一个结构体变量struct Test obj;//给struct Test2类型起一个别名叫Test2typedef struct Test2{ int a;}Test2;Test2 tmp;//给struct Test2int main...

2018-11-14 22:18:01 253

原创 枚举的使用

枚举的使用#include <stdio.h>/*#define pink 0#define red 1#define green 2#define white 3#define black 5#define yellow 6*///enum是关键字//里面的成员是一个标识符,枚举常量//第一个成员如果没有赋值,默认为0,下一个成员比上一个多1//枚举类型...

2018-11-14 22:16:32 254

原创 共用体(联合体)

共用体(联合体)#include <stdio.h>union Test{ unsigned char a; unsigned short b; unsigned int c;};int main(int argc, char const *argv[]){ //1、结构体的大小可以简单认为成员大小的累加 //2、共用体的大小为最大成员的大小 printf(...

2018-11-14 22:14:42 2377

原创 成员变量指针指向 文字常量区、堆区空间、栈区空间

成员变量指针指向 文字常量区、堆区空间、栈区空间#include <stdio.h>#include <string.h>#include <stdlib.h>struct Student{ int age; //char name[50]; char *name; int score;};//成员变量指

2018-11-14 22:14:06 520

原创 指针指向堆区空间

指针指向栈、堆区空间#include <stdio.h>#include <stdlib.h>struct Student{ int age; char name[50]; int score;};int main(int argc, char const *argv[]){ //定义一个结构体类型指针 struct Student *p; ...

2018-11-14 22:04:05 1013

原创 同类型的结构体如何赋值 以及 结构体的值传递和地址传递的区别

同类型的结构体如何赋值 以及 结构体的值传递和地址传递的区别同类型结构体变量赋值#include <stdio.h>struct Student{ int age; char name[50]; int score;};int main(int argc, char const *argv[]){ int a = 10; int b; //1、把a的值给...

2018-11-14 21:55:56 4257

原创 结构体数组和结构体的嵌套

结构体数组和结构体的嵌套结构体数组#include <stdio.h>struct Student{ int age; char name[50]; int score;};int main(int argc, char const *argv[]){ //结构体数组的初始化 struct Student a[5] = { {18, "mike",...

2018-11-14 21:45:13 4873

原创 14、结构体的基本使用

结构体的基本使用#include <stdio.h>#include <string.h>//定义一个结构体类型//1、struct是关键字//2、合起来才是结构体类型//3、结构体内部定义的变量不能直接赋值//4、结构体只是一个类型,没有定义变量前,就是没有分配空间。没有空间,就不能赋值struct Student{ int age; char n...

2018-11-14 21:42:15 205

原创 内存操作函数

内存操作函数1、memset() 主要用于清0/*#include <string.h>void *memset(void *s, int c, size_t n);功能:将s的内存区域的前n个字节以参数c填入参数: s:需要操作内存s的首地址 c:填充的字符,c虽然参数为int,但必须是unsigned char , 范围为0~255 n:指定需要设置的大...

2018-11-09 17:29:44 327

原创 C语言全局变量的缺陷 和 全局变量建议的写法

C语言全局变量的缺陷 和 全局变量建议的写法C语言全局变量的缺陷#include <stdio.h>int a;int a;int a = 0;//定义,其他是声明int a;int a;//有1次是定义,有3次是声明int c;int c;int c;int c;//1、如果定义一个全局变量,没有赋值(初始化),无法确定是定义,还是声明//2、如果定...

2018-11-09 17:22:49 2315

原创 指针对堆栈的使用

指针对堆栈的使用指针指向栈区指针指向堆区内存泄漏:动态分配了空间,不释放内存污染:非法使用内存堆区空间越界:#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ char *p = NULL; p = (char *)malloc(0);//分配的空...

2018-11-09 10:59:29 761

原创 13、内存管理—变量作用

内存管理—变量作用一、普通局部变量include <stdio.h>int main(int argc, char const *argv[]){ int a = 10; if(1) { int a = 11; //就近原则 printf("a = %d\n", a);//a = 11 } //1、if()的a只能在if{}中使用 //2、离开if...

2018-11-09 10:44:24 223

原创 main函数参数说明

main函数参数说明字符指针数组#include <stdio.h>//void fun(int a[10])//void fun(int a[])void fun(int *a){}//void print_array(char *p[100], int n)//void print_array(char *p[], int n)void print_arr...

2018-11-07 15:03:40 445

原创 文字常量区相关知识点说明

文字常量区相关知识点说明文字常量区#include <stdio.h>void fun(char *tmp){ *tmp = 'a';//err}int main(int argc, char const *argv[]){ char *p = NULL;//p是变量 "hello mike";//字符串常量,首元素地址 p = "hello mike";/...

2018-11-07 15:03:12 1477

原创 字符串拷贝

字符串拷贝字符串拷贝函数#include <stdio.h>void my_strcpy(char *dst, char *src){ int i = 0; while( *(src+i) != '\0') { *(dst+i) = *(src+i); i++; } //结束符 *(dst+i) = 0;}int main(int argc, cha...

2018-11-07 15:00:54 1285

原创 字符指针

字符指针字符串打印说明%s#include <stdio.h>int main(int argc, char const *argv[]){ char str[] = "hello mike"; //1、%s,从首元素开始打印,直到结束符位置 //2、%s,操作的是指针所指向的内容 printf("str = %s\n", str); //2、str是首元素地址...

2018-11-07 15:00:00 270

原创 怎么用函数返回变量的地址

怎么用函数返回变量的地址我们先分别讨论一下,返回局部变量地址 和 返回全局变量地址返回局部变量地址#include <stdio.h>//这是错误的示范,不能返回局部变量的地址int *fun(){ int a; return &a;}int main(int argc, char const *argv[]){ int *p = NULL; ...

2018-11-07 14:58:49 5658 3

原创 形参中的数组

形参中的数组数组在形参中有3种不同的表达方式#include <stdio.h>//1、形参中的数组,不是数组元素,它是普通的数组指针变量//2、形参数组:int a[100000],int a[], int *a对编译器而言,没有任何区别。编译器都是当做int *处理//3、形参中的数组和非形参数组区别:形参中的数组时指针变量,非形参数组就是数组//void print...

2018-11-07 14:57:51 4293 1

原创 值传递和地址传递

值传递和地址传递指针的优势体现在函数上,如果只是普通的值传递,那么变量的值将不会改变。而地址传递,可以通过操作指针直接访问地址去改变变量。#include <stdio.h>void swap1(int m, int n);void swap2(int *m, int *n);int main(int argc, char const *argv[]){ int a =...

2018-11-07 14:56:46 409 1

原创 指针数组

指针数组指针数组,它是数组,每个元素都是指针数组指针,它是指针,指向数组的指针#include <stdio.h>int main(int argc, char const *argv[]){ int a[3] = {0, 1, 2}; //指针数组,它是数组,每个元素都是指针 int *p[3]; p[0] = a; p[1] = a+1; p[2] = a+...

2018-11-07 14:54:23 128

原创 const修饰的指针变量

const修饰的指针变量#include <stdio.h>int main(){ //1、指针变量 //2、指针所指向的空间 int a = 10; int *p1 = &a; *p1 = 100;//等价于操作a,*p1操作指针所指向的空间 p1 = NULL;//操作指针变量 //cons...

2018-11-02 21:46:58 164

原创 万能指针

万能指针#include <stdio.h>int main(){ //1、不可以定义void类型的普通变量,不能确定类型 //void a;//err //2、可以定义void *变量,void *指针也叫万能指针 //3、void *可以指向任何类型的变量,使用指针指向内存时,最好转换他本身的指针类型 void *p = NULL;...

2018-11-02 21:46:14 1754 1

原创 12、指针和数组

指针和数组[]不是数组的专属注意:其实数组就是指针,指针也是数组#include <stdio.h>int main(){ int a = 10; int *p = &a; //通过指针间接操作a的内存 *p = 111; printf("a = %d\n", a); printf("*p = %d...

2018-11-02 21:44:03 206

原创 11、指针

指针指针的概述1、内存区的每一个字节都有一个编号,这就是“地址”。2、指针的实质就是内存“地址”。指针就是地址,地址就是指针。3、指针是内存单元的编号,指针变量时存放地址的变量。指针的定义和使用#include <stdio.h>int main(int argc, char const *argv[]){ //1、指针也是一种数据类型 //p是一个变量,p...

2018-11-02 16:05:55 234

原创 10、函数声明,分文件编译

函数声明,分文件编译return 和 exit 的区别return的作用:中断函数,中断main,程序就结束1、return主函数(main),程序结束2、return其他函数,程序不结束exit();//结束整个程序,结束进程实验一个函数,功能和strlen一样的,int my_strlen(char str[]);#include <stdio.h>//1、编译器...

2018-11-02 16:04:27 229

原创 字符处理函数总结大全

字符处理函数总结大全gets()、fgets()#include <stdio.h>/************************#include <stdio.h>char *gets(char *s);功能:从标准输入读入字符,并保存到s指定的内存空间,直到出现换行符或读到文件结尾为止。参数: s:字符串首地址返回值: 成功:读入的字符串 失败...

2018-11-01 14:06:03 441

原创 scanf()的使用注意、scanf() printf()格式字符

scanf()的使用注意、scanf() printf()格式字符#include <stdio.h>int main(int argc, char const *argv[]){ char buf[100] = {0}; printf("请输入字符串:"); scanf("%s", buf);//不需要&, 默认以空格分开 printf("buf = %s...

2018-11-01 13:53:07 494

原创 9、函数

函数函数的分类:库函数、用户定义函数1.函数的定义,就是把之前在main内部的代码换个地方2.函数的定义,类似于厨房做好菜,如果没人点菜,做好的才没有意义函数的定义,只有在用户调用了,才起作用,函数调用类似于点菜1、无参无返回值函数的使用#include <stdio.h>//1、无返回值,用void关键字修饰//2、没有参数,也可用void,或者空//3、第一个vo...

2018-11-01 13:45:15 219

原创 8、字符串数组

字符串数组#include <stdio.h>int main(int argc, char const *argv[]){ //1、C语言没有字符串类型,用字符数组模拟 char a[10]; //2、字符串一定是字符数组,字符数组就不一定是字符串 //3、如果字符数组以字符'\0'('\0'等价于数字0)结尾,那么这个字符数组就是字符串 char b[3] = ...

2018-11-01 13:44:18 180

原创 7、二维数组

二维数组#include <stdio.h>int main(int argc, char const *argv[]){ //1.有多少[]就有多少维 //2.内存中没有多为,都只有一维,多维数组是特殊的一维数组 //3.定义了一个一维数组a[3],这个一维数组有3个元素,每个元素int[4] //4.a[0],a[1],a[2]就是第0、1、2元素的数组 //5....

2018-11-01 13:42:21 249

原创 冒泡排序

冒泡排序冒泡排序原理图#include <stdio.h>int main(int argc, char const *argv[]){ int a[] = {1, -1, 2, -2, 3, -3, 4, -4, 5, -5}; int n = sizeof(a)/sizeof(a[0]); int i = 0; int j = 0; int tmp; p...

2018-10-28 21:11:35 116

原创 数组翻转

数组翻转数组翻转原理图#include <stdio.h>int main(int argc, char const *argv[]){ int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int n = sizeof(a)/ sizeof(a[0]);//元素个数 int i = 0;//首元素下标 int j = n-1;//尾元素下标...

2018-10-28 21:10:36 247

原创 求最值

求最值求数组中的最大值#include <stdio.h>int main(int argc, char *argv[]){ int a[] = {10, -1, 20, 3, 5, 90, 2, 1, 9, 8, 7, 6}; int n = sizeof(a)/sizeof(a[0]); int max = a[0]; int i = 0; for(i = 1...

2018-10-28 21:09:21 247

原创 6、程序流程结构

程序流程结构顺序结构、选择结构、循环结构选择结构if语句 if() _ else if() _ else注意:1、if是一个关键字,if后面有(),if()后面是没有分号​ 2、()里写得是条件,条件为真,执行if语句,为假不执行​ 3、if(1)//条件为真​ if(-1)//条件为真​ if(0)//条件为假​ ...

2018-10-28 17:03:19 204

原创 5、输出、输入的使用 强制类型转换

输出、输入的使用 强制类型转换输出使用字符串常量与字符常量的不同'a’为字符常量,“a”为字符串常量‘a’ ‘a’ ‘\0’printf();//%5d,以5个字符输出,没有的字符以空字符填充,默认是右对齐//%05d,以5个字符输出,没有的字符0填充,默认是右对齐//%-5d,以5个字符输出,没有的字符以空字符填充,-代表指定...

2018-10-28 17:02:52 707

原创 volatile类型限定符的作用

int a; a = 1; a = 2; a = 3; a = 4;volatile 防止编译器优化如果没有volatile,有可能编译器会自动优化,不执行a = 1; a = 2; a = 3;会直接执行 a = 4;而对于硬件而言,这是不允许的。那么,这时候volatile就发挥作用了,不允许编译器去优化这几步。...

2018-10-25 22:33:39 239

原创 4、有符号和无符号的区别 数据类型范围 (解释-128是怎么来的) sizeof()关键字

有符号和无符号的区别 数据类型范围(解释-128是怎么来的) sizeof()关键字有符号和无符号的区别1)有符号,最高位是符号位,如果是1代表是负数,如果为0代表为正数2)无符号,最高位不是符号位,是数的一部分,无符号不可能是负数#include <stdio.h>int main(){ unsigned int c = 0x8000007b; pri...

2018-10-25 21:51:50 2095

原创 3、原码 反码 补码 (为什么计算机存储数字以补码方式存储)

原码 反码 补码 (为什么计算机存储数字以补码方式存储)1)存储1字节(8位)大小的数字(char)原码(用户角度):原始的二进制1、用户的数字分为正负数,符号位的存储2、最高位为符号位:0代表为正数,1代表为负数3、1000 0001 左边是最高位,右边是最低位1, +1: 0000 0001​ -1: 1000 0001​ +0:0000 0000​ -0: 1000 00...

2018-10-25 21:50:28 2498

原创 2、进制

进制当前的计算机系统使用的是二进制系统,数据在计算机中主要是以补码的形式存储的。bit(比特) 位byte(字节) 1个字节为8个二进制(8位) 计算机中存储的最小单位是字节1b 1bit,1位1B 1Byte,1字节,8位1k 1024byte1M 1024k1G 1024M1T 1024G1Kb(千位) 1024bit,1024位1KB(千字节) 1024B...

2018-10-21 19:04:00 327

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除