C语言——数组、函数、指针

C语言——数组、函数、指针


宗旨:技术的学习是有限的,分享的精神是无限的。


1、有什么作用?为什么要使用它们?

(1)数组:提供一段连续的存储空间,存数据和字符串很方便;

(2)函数:模块化程序的设计(返回值和参数);

(3)指针:使用灵活;

 

2、数组的内存布局

【数组和链表区别:数组顺序存储,大小固定;链表随机存储,大小不定。】

int a[5]; --- a作为右值时,代表数组首元素的首地址,而非数组的首地址

//分配了20字节的空间名字为a, a[0], a[1]为a的元素,并非元素的名字。只给数组取名,没给元素取名。

sizeof(a)   ---  sizeof(int) * 5  --- 20

sizeof(a[0]) ---  sizeof(int)  ---  4

sizeof(a[5]) ---  sizeof(int)  ---  4   并没出错,关键字求值是在编译的时候,虽不存在a[5],但这里并未真正访问a[5]。

sizeof(&a[0])---  4

sizeof(&a)---  4

&a[0]和&a ---- &a[0]代表数组首元素的首地址,&a是数组的首地址;值一样,意义不同。

 

  右值:出现在“=”右边的值; 左值:出现在“=”左边的值。

  a不能作为左值

初始化数组:memset(a,0, sizeof(a)); // 初始化为0

 

3、指针数组/数组指针,指针函数/函数指针

指针数组:int*a[10];   --- 实质就是个数组,只不过数组里面的元素全是指针。

数组指针:int(*a)[10]; --- 实质就是个指针,指向一个数组。

指针函数:int*a(int b, int c);  --- 这就是个普通的函数,只不过返回值是int*类型的。

函数指针:int(*a)(int b, int c); --- a是个函数指针,指向一个函数,b,c是函数的参数,返回值为int【a = fun;】。

【typedefint (*potion_t)(int a, int b) --- potion_t相当于一个类型,可以直接用potion_t定义一个变量,只不过这个变量指向一个函数】

 

4、值传递和地址传递

值传递过程中,被调函数的形参作为被调函数的局部变量处理,即在内存的栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

而在地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

 

5、菜单界面的设计

菜单一-- 菜单二-- 菜单三-- 菜单四-- 菜单

  /* 将菜单的属性和操作“封装”在一起 */ 

#define MENUNUM 10;
typedef struct tag_sysmenu
{char *text; /* 菜单的文本 */char xpos;  /* 菜单在LCD上的X坐标 */char ypos;  /* 菜单在LCD上的Y坐标 */void (*on_ok_fun)(); /* 在该菜单上按下OK键的处理函数 */void (*on_cancel_fun)(); /* 在该菜单上按下cancel键的处理函数  */
} sys_menu_t, *lpsys_menu_t;static sys_menu_t  menu[MENUNUM] =
{{"menu1", 0, 48, menu1on_ok, nemu1on_cancel},{"menu2", 7, 48, menu2on_ok, nemu2on_cancel},{"menu3", 7, 48, menu3on_ok, nemu3on_cancel},{"menu4", 7, 48, menu4on_ok, nemu4on_cancel}...
};

  OK和Cancel键的处理变成:

void onok_key()
{menu[currentFocusMenu].on_ok_fun();
}
void on_cancel_key()
{menu[currentFocusMenu].on_cancel_fun();
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

--4、实验室设备管理(表)

--4、实验室设备管理create table Computer( Computer_id int Identity Primary key,--设备编号 Computer_name varchar(50) not null,--设备名称 Computer_num varchar(50) not null,--设备编号,财产号 room_id int not null,--实验室编号 --Computer_IP varchar(128), -…

十六进制转十进制

问题描述从键盘输入一个不超过8位的正的十六进制数字符串&#xff0c;将它转换为正的十进制数后输出。注&#xff1a;十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入FFFF样例输出65535 #include<stdio.h> #include<string.h> #include<…

C#中Invoke的用法

在用.NET Framework框架的WinForm构建GUI程序界面时&#xff0c;如果要在控件的事件响应函数中改变控件的状态&#xff0c;例如&#xff1a;某个按钮上的文本原先叫“打开”&#xff0c;单击之后按钮上的文本显示“关闭”&#xff0c;初学者往往会想当然地这么写&#xff1a; v…

三类危险的TXT文件

一。 隐藏HTML扩展名的TXT文件 假如您收到的邮件附件中有一个看起来是这样的文件&#xff1a;QQ 放送.txt&#xff0c;您是不是认为它肯定是纯文本文件&#xff1f;我要告诉您&#xff0c;不一定&#xff01;它的实际文件名可以是QQ 放送.txt{3050F4D8-98B5-11CF-BB82-00AA00BD…

嵌入式如何入门,要不要学习Python

#提问我是你的公众号读者朋友&#xff0c;江苏省在读大学生一名&#xff0c;目前是大四免研。研究生方向是嵌入式系统与应用(导师招这样的学生&#xff0c;但是本身设计这个方向不多)&#xff0c;目前还比较有时间&#xff0c;想要自己深入学习一下嵌入式方面的知识&#xff0c…

13.强符号和弱符号

我们在编写代码的过程中经常会遇到一种叫做符号重复定义&#xff08;Multiple Definition&#xff09;的错误&#xff0c;这是因为在多个源文件中定义了名字相同的全局变量&#xff0c;并且都将它们初始化了。 例如&#xff0c;在 a.c 中定义了全局变量 global&#xff1a; int…

C语言——预编译

C语言——预编译 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 在C 语言中&#xff0c;并没有任何内在的机制来完成如下一些功能&#xff1a;在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作&#xff0c;就需要使…

深入理解cache对写好代码至关重要

There are only two hard things in Computer Science: cache invalidation and naming things.-- Phil Karlton全文目录CACHE基础CACHE的组织TAG,INDEXVIVT,VIPT,PIPTCache别名问题CACHE一致性icache、dcache同步多CPU核cache同步CPU与设备cache同步意识到CACHE的编程perf中的…

[推举]网络工程师必懂的专业术语

路由器问题&#xff1a; 1、什么时候使用多路由协议&#xff1f; 当两种不同的路由协议要交换路由信息时&#xff0c;就要用到多路由协议。当然&#xff0c;路由再分配也可以交换路由信息。下列情况不必使用多路由协议&#xff1a; 从老版本的内部网关协议&#xff08; Interio…

基础练习 特殊回文数

问题描述123321是一个非常特殊的数&#xff0c;它从左边读和从右边读是一样的。输入一个正整数n&#xff0c; 编程求所有这样的五位和六位十进制数&#xff0c;满足各位数字之和等于n 。输入格式输入一行&#xff0c;包含一个正整数n。输出格式按从小到大的顺序输出满足条件的整…

IO流--buffer

示例展示&#xff1a; package buffer;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.I…

Linux 用户空间和内核空间

最近在微信群里看到有人提这个问题&#xff0c;然后查了下资料&#xff0c;觉得这篇文章是写得最能让人看懂的&#xff0c;分享给大家。欢迎大家评论说出自己的见解&#xff0c;让更多的人更容易理解这部分知识。之前的相关文章Linux内存&#xff0c;先看这篇文章Linux物理内存…

数据库的学习

自从搬到那边学校去了&#xff0c;就好久都没有写过我的学习了。因为没那么多时间上网了&#xff0c;有时候去网吧上网也不想写了。又开始了一本书的学习&#xff0c;那就是数据库。还记得去年那个时候学数据库的时候&#xff0c;大家都说我们学会最多的就是ctrlc和ctrlv&#…

2017.12.20-21

1.今天&#xff0c;继续学习公司产品DDS的开发手册。 首先&#xff0c;其中有几个概念需要认识&#xff1a; CORBA(Common Object Request Broker Architecture):公共对象的请求代理体系结构&#xff0c;OMG组织定义的一种面向对象应用的标准国际规范架构。为简化跨平台应用而提…

C语言——宏定义

C语言——宏定义 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 注意&#xff1a;宏定义不是函数&#xff01;&#xff01; 一般用来简化操作的&#xff0c;但又能避免函数调用那样需要进行切换环境&#xff0c;花费时间。例如&#xff1a; #define ma…

一个深入学习Linux/C/C++的原创技术号

今天给大家推荐一个Linux/C/C领域的公众号&#xff0c;大家都知道这个领域的号不多&#xff0c;而【编程珠玑】就是这样一个专注该领域的原创类公众号&#xff0c;原创占比95%以上&#xff0c;目前已有原创文章200多篇&#xff0c;而且原创间环环相扣&#xff0c;皆有关联。公众…

Redis Java调用

Redis Java调用 package com.stono.redis;import redis.clients.jedis.Jedis;public class RedisJava {public static void main(String[] args) {Jedis jedis new Jedis("localhost");System.out.println("ok");System.out.println("ping "jed…

Linux 资料大全

Hello all&#xff0c;给大家分享一些 Linux 学习资料&#xff0c;包含&#xff1a;社区网站、在线教程、命令大全、在线模拟器、经典书籍、镜像站点等 ...从入门到进阶&#xff0c;应有尽有。无论你是小白&#xff0c;还是 Linux 高手&#xff0c;都不容错过&#xff0c;100% …

C语言——字符串函数

C语言——字符串函数 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 常用字符串操作函数的实现&#xff1a;注释部分你们注意一下&#xff0c;我没加/&#xff0c;加了/就看不到注释了。 ************************************************* *功能:实…

创业思考点滴

创业的理由应该是为了做更有意义的事&#xff0c;而不是赚更多钱&#xff0c;是为了更大程度地实现自身价值&#xff0c;而不是得到更多财富。 创业对个人是很大的挑战&#xff0c;这种挑战会让人成长得更快。 在创业过程中&#xff0c;自省很重要&#xff0c;很多时候问题与困…