c语言--指针与数组

1.指针和地址

&是对变量取得其线性地址。故只能应用于存储在内存中的对象,如变量,数组元素。&不能应用于表达式,常量,寄存器变量。

2.指针和数组

int a[10];
int *pa;
pa = &a[0];// 等价于pa = a;
a[i];// 等价于*(a+i)
&a[i];// 等价于a+i

(1). 形如int *pa;这样的定义下,pa是变量。
(2). 数组名不是变量,不可对其执行赋值,取地址等操作。
(3). 作为函数形参时,char s[],char*s等价。

3.指针运算

(1). 指针+/- 整数 :结果是指针执行当前位置向前/向后移动指定数量同类型对象后的地址.
(2). 指针1 - 指针2:意思是指针1和指针2之间相差的同类型对象的个数。<stddef.h>定义了ptrdiff_t,保证足够大的有符号数,可存储两个指针的差值.
(3). 指针可以和0比较,0可赋给指针,其他整形常量不行。程序中常用NULL代替0NULL定义在<stddef.h>

有效指针运算:
(1). 相同类型指针间赋值运算,当两者之一为void*时,另一方无指向类型要求.
(2). 指针同整数间的加法或减法运算.
(3). 指向相同数组中元素的两个指针间的减法或比较运算.
(4). 将指针赋值为0或指针与0间的比较.

4.字符指针和字符数组

char amessage[] = "now is the time"; /* 字符数组支持采用常量字符串初始化,数组名不是变量 */
char *pmessage = "now is the time"; /* 字符指针,指针是变量 */

5.多维数组

二维数组

static char daytab[2][13] = 
{
	{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
	{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

// 二维数组作为参数传递
f(int daytab[2][13]) { ... }
// 等价
f(int daytab[][13]) { ... }
// 等价
f(int (*daytab)[13]) { ... }

多维数组作为函数参数传递时,维度1可以省略,其余各个维度不可以.

6.指针数组初始化

static char *name[] = 
{
	"Illegal month",
	"January", 
	"February", 
	"March",
	"April", 
	"May", 
	"June",
	"July", 
	"August", 
	"September",
	"October", 
	"November", 
	"December"
}

字符串常量在编译时会存储在指定段内。数组列表初始化时,若未指定容量编译器会推断。

7.函数指针

#include <iostream>
int fun(int a) {
	printf("%d\n", a);
}

typedef int (*FunType)(int a) ;
int main() {
	FunType f = fun;
	(*f)(10);
}

函数本身不是变量,但可能定义指针指向函数,指针是变量。
上述演示了函数指针及其使用。

8.理解复杂声明

char **argv:首先是指针,指针指向类型为char *
int (*daytab)[13]:首先是指针,指针指向类型为int [13],这是一个13int类型元素构成的数组.
int *daytab[13]:首先是数组,数组容量是13,数组元素是int*
void *comp():首先是函数,函数形参为空,返回值为void*
void (*comp)():首先是指针,指向void (),这是一个形参为空,返回值为void的函数类型.
char (*(*x())[])():首先是函数,函数形参为空,返回值指针类型,指向一个数组,数组元素是指针,指向char (),即一个形参为空,返回值为char的函数.
char (*(*x[3])())[5]:首先是数组,数组容量是3,数组元素是指针,指向函数类型,函数形参为空,返回值为指针类型.指针指向char [5],即一个容量为5,元素类型为char的数组.
char (*(*x())[])():首先是函数,形参为空,返回值为指针,指向数组,数组元素是指针,指向函数类型.函数形参为空,返回值为char

char (*(*x())[])()为例分析如何理解这一声明。
(1). 寻找复杂声明核心符号,这里是x
(2). 观察最靠近核心符号的修饰符,这里是*()
(3). 利用运算符对核心符号定性,由于运算符结合性()高于*。所以,x()结合构成x(),这样x是一个函数,函数形参列表是空的。
(4). 接下来解释*,这表示函数返回值是指针类型。为了弄清指针指向类型我们需要继续解析。
(5). 包裹*x()的括号无需解释。继续寻找剩余修饰符,这里是*[]
(6). 由于运算符结合性[]高于*,所以先处理[],这样看,指针指向的是一个数组。为了知道数组元素类型我们继续分析。
(7). 此时处理*,这样看数组元素是指针类型。为了弄清指针指向类型我们继续分析。
(8).包裹*(*x())[]的括号无需解释。此时剩余符号为char()。这里很明显是指针指向一个函数,函数形参列表为空,返回值为char

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从字化校园向智慧校园的转变,通过自动据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值