函数,数组相关

本文深入探讨JavaScript中关键的内置函数与数学、日期、字符串操作,包括isNaN、parseInt、Math对象的使用,如PI、ceil、random,以及Date对象的方法,如getFullYear、toLocaleString,还有字符串的创建、搜索、替换等功能。
函数
	内置函数
		isNaN()
		parseInt()
		parseFloat()
	函数是什么?
		可以重复调用的代码块
	定义函数
		function name(arg1,arg2){


return 返回值
}
调用函数
name(实参)
通过事件调用

匿名函数自执行 !function(){}() 变量提升 var 声明的变量默认会提到 最前面默认值是undefined function 声明的函数,函数前函数后都可以调用 Math 数学对象 PI 常量 ceil() 小数进1 floor() 舍去小数 round() 四舍五入 random() 产生随机 0-1 范围 Math.random()*(上限-下限)+下限 max() ,min() 最大,最小值 abs() 绝对值 其他 pow() tan sin cos Date 1. 实例化当前日期 var d = new Date(); 获取 getFullYear(); 年 getMonth() 月份 0-11 getDate() 日期 1-31 getDay() 星期 0-6 getHours() 小时 getMinutes() 分 getSeconds() 秒 getTime() 返回该日期与1970年1月1日的时间差 var d2 = new Date(2020,0,1,12,30) 创建一个日期 时间为 2020年1月1日12点30分(月份从0开始) 设置日期 setFullYear(2020); setMonth(11); toLocaleString 返回一个本地化的时间 间隔调用 (多次) var id = setInterval(fun,1000) 每隔1秒执行一次fun函数 clearInterval(id); 停止间隔调用 延迟调用 1次 var id = setTimeout(fun,2000) 延迟2秒调用1次fun函数 clearTimeout(id): 停止延迟调用
	字符串
		创建
			var str = new String("我爱我的祖国")
			var str = "我爱我的祖国"
			var str ='我爱我的祖国'
			特点,双引号字符串可以包含单引号
      单引号里面可以包含双的
			用new创建的两个字符串即使值一样也不相等
		搜索
			搜索字符在字符串所在的下标索引

str.indexOf(“字符”)
搜索不到 返回-1
indexOf(“字符”)
从0的位置开始搜索
indexOf(“字符”,7)
从第7的位置开始搜索
charAt(7)
返回下标对应的字符串
str.lastIndexOf(".")
从后开始搜索
替换
str3 = str.replace(“被替换字符串”,替换字符)
全局替换
var str4 = str.replace(/祖国/g,“国家”)
length
字符的长度
截取
substr(从第几个,截取几个)
str.substr(3,5) 把字符串str从第3个截取5个字符 (结果是有5个字符)
substring(从第几个,截取到第几个)
str.substring(3,5) 把字符串str从第3个截取到第5个字符 (结果有2个字符)
如果只有一个参数 substr 和substring 是一样的,从第一个参数截取到最后
表单
form
onsubmit
单击提交按钮 事件
action 数据提交的地址
input
onblur
失去光标事件
value
表单的值

<think>嗯,用户问的是“函数数组指针”,这个术语有点容易混淆,我得先弄清楚他们具体指的是什么。首先,函数数组指针可能涉及三个概念:函数指针、数组指针,以及它们的组合。可能用户是想了解如何定义指向函数数组的指针,或者指向数组函数指针?不过更常见的情况可能是指向函数的指针数组,或者数组的指针,但需要结合函数的情况。 首先,我需要回顾一下C/C++中的相关概念。函数指针是指向函数的指针变量,例如int (*funcPtr)(int, int)可以指向一个接受两个int参数并返回int的函数数组指针则是指向数组的指针,比如int (*arrPtr)[10]指向一个包含10个int元素的数组。而函数数组指针可能是指一个数组,其元素是函数指针,或者是一个指针指向这样的数组。 用户可能是在学习这些复合类型时遇到了困惑。例如,定义一个包含多个函数指针的数组,或者一个指针指向这样的数组。这时候需要明确语法结构,因为C/C++的声明语法有时比较复杂。 比如,函数指针数组的正确声明应该是int (*funcArray[5])(int),这表示funcArray是一个有5个元素的数组,每个元素都是指向返回int且接受一个int参数的函数的指针。而如果要定义一个指向这个数组的指针,应该怎么写?这时候可能需要使用typedef来简化。例如: typedef int (*FuncPtr)(int); FuncPtr (*arrPtr)[5] = &funcArray; 或者直接声明:int (*(*arrPtr)[5])(int) = &funcArray; 这样的声明看起来复杂,但分解起来可能更容易理解。用户可能需要具体的例子来理解如何声明和使用这样的指针。 另外,用户可能在实际编程中遇到需要传递函数指针数组的情况,或者需要动态分配这样的数组,这时候正确的指针操作就很重要了。例如,在回调机制或状态机设计中,函数指针数组很常见,而了解如何通过指针来操作这些数组是必要的。 还需要注意,函数指针和数组指针在语法上的区别。函数指针的声明需要参数列表,而数组指针则需要指定数组的大小。当它们结合在一起时,声明的可读性可能会变差,因此使用typedef来分步定义可能是个好方法。 总结来说,用户需要了解如何正确声明和使用指向函数数组的指针,或者函数指针数组的指针。这时候,分步解析声明语法,提供示例代码,并解释每一步的作用,会很有帮助。同时,提醒用户注意语法中的括号位置,因为错误的放置会导致完全不同的类型解释。例如,int *funcArray[5]()表示一个返回int指针的函数数组,而int (*funcArray[5])()才是一个函数指针数组,返回int。 最后,可能还需要讨论应用场景,比如在实现策略模式、插件系统或者命令解析时,函数指针数组的指针如何被用来动态调用不同的函数,增强程序的灵活性和模块化。</think>好的,我来逐步解释“函数数组指针”的概念: 1. **基础概念分解** - **函数指针**:存储函数地址的变量,如 `int (*pFunc)(int)` - **数组指针**:指向数组的指针,如 `int (*pArr)[5]` - **函数数组指针**:指向“函数指针数组”的指针,属于复合类型 2. **语法结构解析** ```c // 定义函数指针类型 typedef int (*FuncPtr)(int); // 创建函数指针数组 FuncPtr funcArray[3] = {func1, func2, func3}; // 定义指向这个数组的指针 FuncPtr (*pFuncArray)[3] = &funcArray; ``` 等效的直接声明: ```c int (*(*pFuncArray)[3])(int) = &funcArray; ``` 3. **关键符号解析** ``` int (*(*ptr)[N])(params) │ │ │ └── 函数参数列表 │ │ └── 指向的数组长度 │ └── 指针声明符 └── 函数返回类型 ``` 4. **使用场景** - 需要传递整个函数指针数组时 - 需要修改函数指针数组的指向时 - 实现动态函数调度系统 5. **示例代码演示** ```c #include <stdio.h> int add(int a) { return a + 1; } int sub(int a) { return a - 1; } int main() { // 定义函数指针数组 int (*funcs[2])(int) = {add, sub}; // 定义指向数组的指针 int (*(*pFuncs)[2])(int) = &funcs; // 通过指针调用 for(int i = 0; i < 2; i++) { printf("Result: %d\n", (*pFuncs)[i](5)); } return 0; } ``` 6. **易错点注意** - 括号嵌套顺序错误会导致类型改变 - 数组长度必须与目标数组匹配 - 解引用时需要先取数组再访问元素 理解函数数组指针的关键是:它本质上是二级指针,指向一个包含函数指针的数组。通过分步类型定义和使用typedef可以显著提高代码可读性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值