STM32——C语言知识点:指针、结构体
/*
============================================================================
Name : Cyuyanfuxi.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/ #include <stdio.h>
#include <stdlib.h>
//函数声明
void reset(int i);
void reset2(int* p);
void add_by_point(int x,int y,int *result);
//结构体定义
struct student
{
int age;
float weight;
char name[];
};
void struct_caculate(struct student *p); int main(void)
{
//求类型的字节
printf("%d\n",sizeof(char));//1字节
printf("%d\n",sizeof(int));//4字节
printf("%d\n",sizeof(float));//4字节
printf("%d\n",sizeof(double));//8个字节输出p1,也就是a的地址
puts("1------------------------------------------");
int a = ;//定义一个整型变量a,并赋值为10
int *p1 = &a;//定义一个指针*P1,赋值为变量a的地址,
char *p2 = p1;//定义一个字符变量p2,赋值为p1的地址
printf("%d\n",p1);//输出p1,也就是a的地址(2686776)
//运算要根据类型
printf("%d\n",p1+);//输出4210696,也就是2686776+4,因为p1是int类型4字节,所以加4
printf("%d\n",*p1);//带*号的意思是输出p1里面的内容,10
printf("%d\n",*p2);//
puts("2------------------------------------------");
int code[] = { ,,,,};//定义一个数组
//结论:数组内容值默认为0
printf("%d\n",code[]);//输出数组的第5个值,但是数组只有第4个,数组有定义10个,那么数组内容默认为0
//结论:数组名也是数字首地址
printf("%d\n",code);//求数组名的地址 2686732 发现一样的
printf("%d\n",&code[]);//求数组的第一个数字的地址 2686732
//指针运算要根据指针的类型
printf("%d\n",code+);//求数组加一的地址,输出2686732+4 printf("%d\n",*(code+));//求数组第三个数字的值,3
*(code+) = ;//(code+2)是一个地址,*(code+2)是内容,现在把0赋值为里面的内容
printf("%d\n",*(code+));//
puts("3------------------------------------------");
int d = ;
reset(d);//函数的调用
//结论:函数的独立性,
printf("%d\n",d);//
reset2(&d);//取地址
//使用指针的方式突破函数壁垒
printf("%d\n",d);//0
//什么是返回值
int e = add(,);
printf("e = %d\n",e);//
int result = ;//??
//指针的方式计算结果
add_by_point(,,&result);
printf("result = %d\n",result);//
puts("4------------------------------------------");
printf("student结构体字节数 = %d\n",sizeof(struct student));//4+4+20=28
struct student kinson = //结构体赋值
{
,,"kinson"
};
printf("%d\n",sizeof(kinson));//
printf("%d\n",&kinson);//取结构体名kinson的地址2686692
//结构体指针运算根据指针的类型来判断
printf("%d\n",(&kinson+));//2686692+28=2686720
//结构体的地址就是第一个成员的地址
printf("%d\n",&kinson.age);//2686692
//结构体成员的地址是连续的
printf("%d\n",&kinson.weight);//
printf("%d\n",&kinson.name);//2686700 //printf("%d\n",kinson.name);
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */ return EXIT_SUCCESS;
}
void reset(int i)//定义一个子函数
{
i = ;//赋值i=0;
}
void reset2(int* p)//定义一个指针函数
{
*p = ;//指针p的内容是0
} int add(int i,int j )//定义一个子函数,什么是返回值要用
{
/*
变量的生命周期
*/ int q = i+j;
return q;
}
void add_by_point(int x,int y,int *result)//指针函数要用
{
int r = (x + y);
*result = r;
} void struct_caculate(struct student *p)
{ p->name = "kinson2"; }
STM32——C语言知识点:指针、结构体的更多相关文章
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- GO学习-(13) Go语言基础之结构体
Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...
- 【AT91SAM3S】SAM3S-EK Demo工程中,LCD驱动程序的加载(函数指针结构体)
为了调试LCD,在英倍特的板子上烧Atmel的sam3s-ek_demo_1.4_source示例代码.LCD显示正常了,却找不到LCD的驱动究竟在哪. 花了好久,追踪到了这个执行过程. 进入main ...
- Go语言基础之结构体
Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...
- C语言第九讲,结构体
C语言第九讲,结构体 一丶结构体的定义 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种 ...
- Go-常识补充-切片-map(类似字典)-字符串-指针-结构体
目录 Go 常识补充 Go 命名 打印变量类型科普 _ 关键字 命名规范相关 包目录规范 切片 多维切片 切片初始化的方法 多维切片初始化 切片删除元素(会略微影响效率 ,少用) copy 函数 打散 ...
- C语言中的结构体,结构体数组
C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...
- 4-17疑难点 c语言之【结构体对齐】
今天学习了结构体这一章节,了解到了结构体在分配内存的时候采取的是对齐的方式 例如: #include<stdio.h> struct test1 { int a; char b; shor ...
- C 语言实例 - 使用结构体(struct)
C 语言实例 - 使用结构体(struct) C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...
- Verilog缺少一个复合数据类型,如C语言中的结构体
https://mp.weixin.qq.com/s/_9UsgUQv-MfLe8nS938cfQ Verilog中的数据类型(Data Type)是分散的,缺少一个复合数据类型:把多个wire, r ...
随机推荐
- 控制台操作mysql常用命令
总结: 1. 控制台链接mysql mysql -u lzpddd -pmypassword -h -D mydb -S /opt/mysql/data/mysql//mysql.sock 2.
- 俺也会刷机啦--windows7下刷android
刷机很多人都会,本文只为像我这种入门的朋友而写的. 风险提示: 1. SD卡数据极可能会丢失(我这次就全丢了). 2. 升级失败. (俺的)环境说明: windows7 专业版64位 cmd命令行工具 ...
- 饮冰三年-人工智能-linux-04 vim编辑器
vim的三种模式:命令行模式.编辑模式.扩展模式 1:命令行模式下常见的操作 删除 a):dd 删除光标所在当前行 b):ndd 删除光标所在当前行后的n行 复制 c):yy 复制光标所在当前行 ...
- ecilpse运行Servlet程序是找不到路径的原因
当工作空间路径有空格时,空格会被转成%20,将导致路径无法识别,于是就找不到路径了.
- ORA-01536: 超出表空间 'tablespace_name' 的空间限额
表空间限额问题知识总结: 表空间的大小与用户的配额大小是两种不同的概念 表空间的大小是指实际的用户表空间的大小,而配额大小指的是用户指定使用表空间的的大小 把表空间文件增大,还是出现 ...
- Vs2017获取Git空仓库后创建解决方案及项目无法推送,推送失败的问题.
与Git无关,因为远程是空文件夹,导致没有远程版本做对应提示更改或怎样,必须在创建人创建仓库的时候上传文件代码. https://developercommunity.visualstudio.c ...
- Kettle Spoon入门教程
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.其中,Spoon是Kettle中的一个组件,其他组件有PAN,CHEF,Enc ...
- mysql binary
mysql在比较字符串的时候是忽略大些写的 比如有用户叫ABC和abc select * from `sys_user` where username = 'abc' 会出来两条记录 select * ...
- LNMP分离部署
环境: Nginx+PHP:192.168.2.144 Mysql:192.168.2.151 [Nginx] yum install -y pcre-devel openssl-deve popt- ...
- 20165319第五周java学习笔记
教材内容总结 1.String类和StringBuffer类都覆盖了toString方法,都是返回字符串. 所以带不带toString效果是一样的. 2.instanceOf运算符可以用来判断某个对象 ...