STM32——C语言知识点:指针、结构体

发布时间:2024-08-15  

  1 /*

  2  ============================================================================

  3  Name        : Cyuyanfuxi.c

  4  Author      : 

  5  Version     :

  6  Copyright   : Your copyright notice

  7  Description : Hello World in C, Ansi-style

  8  ============================================================================

  9  */

 10 

 11 #include

 12 #include

 13 //函数声明

 14 void reset(int i);

 15 void reset2(int* p);

 16 void add_by_point(int x,int y,int *result);

 17 //结构体定义

 18 struct student

 19 {

 20             int age;

 21             float weight;

 22             char name[20];

 23 };

 24 void struct_caculate(struct student *p);

 25 

 26 int main(void)

 27 {

 28     //求类型的字节

 29     printf('%dn',sizeof(char));//1字节

 30     printf('%dn',sizeof(int));//4字节

 31     printf('%dn',sizeof(float));//4字节

 32     printf('%dn',sizeof(double));//8个字节输出p1,也就是a的地址

 33     puts('1------------------------------------------');

 34     int a = 10;//定义一个整型变量a,并赋值为10

 35     int *p1 = &a;//定义一个指针*P1,赋值为变量a的地址,

 36     char *p2 = p1;//定义一个字符变量p2,赋值为p1的地址

 37     printf('%dn',p1);//输出p1,也就是a的地址(2686776)

 38     //运算要根据类型

 39     printf('%dn',p1+1);//输出4210696,也就是2686776+4,因为p1是int类型4字节,所以加4

 40     printf('%dn',*p1);//带*号的意思是输出p1里面的内容,10

 41     printf('%dn',*p2);//10

 42     puts('2------------------------------------------');

 43     int code[10] = {1 ,2,3,4,5};//定义一个数组

 44     //结论:数组内容值默认为0

 45     printf('%dn',code[5]);//输出数组的第5个值,但是数组只有第4个,数组有定义10个,那么数组内容默认为0

 46     //结论:数组名也是数字首地址

 47     printf('%dn',code);//求数组名的地址                                   2686732    发现一样的

 48     printf('%dn',&code[0]);//求数组的第一个数字的地址     2686732

 49     //指针运算要根据指针的类型

 50     printf('%dn',code+1);//求数组加一的地址,输出2686732+4

 51 

 52     printf('%dn',*(code+2));//求数组第三个数字的值,3

 53     *(code+2) = 0;//(code+2)是一个地址,*(code+2)是内容,现在把0赋值为里面的内容

 54     printf('%dn',*(code+2));//0

 55     puts('3------------------------------------------');

 56     int d = 10;

 57     reset(d);//函数的调用

 58     //结论:函数的独立性,

 59     printf('%dn',d);//10

 60     reset2(&d);//取地址

 61     //使用指针的方式突破函数壁垒

 62     printf('%dn',d);//0

 63     //什么是返回值

 64     int e = add(3,5);

 65     printf('e = %dn',e);//8

 66     int result = 0;//??

 67     //指针的方式计算结果

 68     add_by_point(5,5,&result);

 69     printf('result = %dn',result);//10

 70     puts('4------------------------------------------');

 71     printf('student结构体字节数 = %dn',sizeof(struct student));//4+4+20=28

 72     struct student kinson = //结构体赋值

 73     {

 74             21,61,'kinson'

 75     };

 76     printf('%dn',sizeof(kinson));//28

 77     printf('%dn',&kinson);//取结构体名kinson的地址2686692

 78     //结构体指针运算根据指针的类型来判断

 79     printf('%dn',(&kinson+1));//2686692+28=2686720

 80     //结构体的地址就是第一个成员的地址

 81     printf('%dn',&kinson.age);//2686692

 82     //结构体成员的地址是连续的

 83     printf('%dn',&kinson.weight);//2686696

 84     printf('%dn',&kinson.name);//2686700

 85 

 86     //printf('%dn',kinson.name);

 87     puts('!!!Hello World!!!'); /* prints !!!Hello World!!! */

 88 

 89     return EXIT_SUCCESS;

 90 }

 91 void reset(int i)//定义一个子函数

 92 {

 93     i = 0;//赋值i=0;

 94 }

 95 void reset2(int* p)//定义一个指针函数

 96 {

 97     *p = 0;//指针p的内容是0

 98 }

 99 

100 int add(int i,int j )//定义一个子函数,什么是返回值要用

101 {

102     /*

103       变量的生命周期

104      */

105 

106     int q = i+j;

107     return q;

108 }

109 void add_by_point(int x,int y,int *result)//指针函数要用

110 {

111     int r = (x + y);

112     *result = r;

113 }

114 

115 void struct_caculate(struct student *p)

116 {

117 

118     p->name = 'kinson2';

119 

120 

121 }


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    看到在archarmmach-s3c2440mach-smdk2440.c 中有smdk2440_devices这么一个结构体指针数组 static struct platform_device......
    : student[0].namestudent[30].age 结构体指针 结构体指针由一个加在结构......
    C语言进阶之回调函数详解;一、函数指针在讲之前,我们需要了解函数指针。本文引用地址:我们都知道,的灵魂是指针,我们经常使用整型指针,字符串指针结构体指针等。 int *p1;char *p2......
    ',sizeof(kinson));//28  77     printf('%dn',&kinson);//取结构体名kinson的地址2686692  78     //结构体指针运算根据指针......
    u-boot之start_armboot函数分析;1、gd全局变量初始化 2、调用init_sequence函数指针数组里的初始化函数、nand初始化、环境变量初始化、USB初始化 3、死循......
    ,sizeof(float)也是4。不过最常用的还是sizeof自己定义的各种各样的结构体。 但是我有一次不小心把sizeof(结构体类型名)写成了sizeof(结构体指针名)。这样sizeof就反馈的不是结构体......
    =0; pBtn->RepeatCount=0; } } 这个函数还是比较难以理解的,主要是结构体的操作。所以好好学习结构体,不要见了结构体就跑。 分析:首先读取相应按键的结构体地址赋值给结构体指针......
    *)my_data; //把你的结构体指针指向这个数组的开头 复制代码 以后的操作就这样: My_Str-》DATA1[0]=xxx; My_Str-》DATA1[1]=xxx; 那么......
    ,32单片机里面的关于结构体指针的内容还是搞不清楚呢?如果你有这些问题,今天就带你研究研究! 这张图学过STM32单片机的小伙伴应该都不陌生,我们看到的STM32芯片......
    **array_ptr, int value)函数,这个函数就是将一个新的整数值动态添加到数组中,这也是最麻烦的过程。 第一个形参是结构体array_ptr,是个二级指针,指向旧的结构体内存首地址,注意这个指针......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>