1.自由节奏
Rubato标志
2.延续
此时不要再次触碰相对弦(下弧线 )
三连音
击弦+勾弦三连音,上弧线代表只弹第一个音
装饰音
此次主要为听到后一个音
(若单有上斜线则会从低位到高位滑音(无头/无尾滑音))
左手抹弦
L.H.Stroke +左手拍弦
点弦
正上方表有L.H,此处()为幽灵音
存储方式:
内存寻址从大到小, 从高地址开辟一块连续没有被使用的内存给数组。
从分配的连续存储空间中, 地址小的位置开始给每个元素分配空间。
从每个元素分配的存储空间中, 地址最大的位置开始存储数据。
用数组名指向整个存储空间最小的地址。
(分配从小地址开始,赋值从大地址开始)
如果还没有学习指针相关内容可以先跳过
先看一下各种情况的输出结果
1 | int main() |
*p和&a[0] [0]时,输出的值为地址且二者相同,&a[0] [0]我们不难理解,但对于*p,上一点已经说到,p代表了p这个数组指针第一个元素的地址,如果我们对这个地址进行解引用(关于解引用*运算符在指针相关复习 | 小董的BLOG 中有详细讲到),返回值也就是这个首元素的地址内所存储的内容,而我们知道,指针变量本身存储的内容就是地址,所以对p进行解引用的结果,就是p的首元素的地址(6487520)所存储的“a[0] [0]的地址(6487552)“**p和` p[0]的结果了;p即再对 *p`进行一次解引用,也就是对”a[0] [0]的地址(6487552)“解引用,返回值为a[0] [0]的地址所存储的内容,即1。(`p和 *p[0]`等价)如果你对以上内容已经比较理解,那可以思考一下以下内容(以下内容是我个人的理解,不能保证正确!)
1 | int main() |
根据对一维数组的学习,可以推断出二维数组名a即代表第一个元素的地址,把这个元素地址放进p内,完全没问题,全然大丈夫!但是编译器就是报错了捏😋。在网上找了很多资料之后,大概能想明白是怎么回事,但是又并不是那么明白:二维数组名a代表的是a[2][3]中a[0]的地址,而在C语言中,这个a[0]又被看作a[3]={1,2,3};那么这里的a是不是就可以看作是a[0] [0]的地址呢,我们接着尝试:
1 | printf("%d",a);//6487552 |
我超,什么意思捏,a和*a输出值一样???为了解释这个现象,我们不妨来读一下刚刚的报错:
[Error] cannot convert 'int [2][3]' to 'int*' in assignment
这里我的理解是:二维数组a的类型为int [2][3],而a[0]的类型为int[3],通俗一点,就是a代表的是第一行数组的地址,而a[0]代表的是a[0] [0]的地址,二者虽然在地址值上相同,但表达的意思是不同的,这也就是为什么a无法存入p中的原因,因为类型是冲突的。所以这里正常的赋值应为:
1 | int main() |
说真的感觉不太好理解,所以可以记下一个规律:
对一个代表一行元素的地址解引用,得到的是该行首元素的地址,再对这个地址解引用得到首元素
(所以此处a[0]等同于*a)
指针数组
1 | int *p[3]; |
在C语言中,[]的优先级高于*因此此式正确理解为:int *(p[3]),说明p为一个数组,且该数组用于存放地址,此时p是一个数组,但其元素内存储的为某个地址
数组指针
1 | int (*p)[3]; |
先表明了p是一个指针变量,再说明了p指向的对象是一个int[3]型的数组,且p本身保存的是指向数组的首地址,此时p是一个指针
对数组指针的调用
1 | int main() |
对于数组指针的使用有以下几点:(都假设存放的是多维数组)
p[0][0],此时p[0][0]就代表数组元素的值,而不是地址 一维:可以理解为行数,可省略。
二维:~~,不可省略(会报错)。
分行赋值
1 | int a[3][4]= |
指定元素的初始化
1 | int a[2][3]={[1][2]=10}; |
形参是基本类型则不会影响实参,如果是数组类型则会影响实参。
1 | #include<stdio.h> |
通过键盘录入 w,s,a,d控制小人向不同方向移动,其中w代表向上移动,s代表向 下移动,a代表向左移动,d 代表向右移动,当小人移动到出口位置,玩家胜利。
1 | #include <stdio.h> |
例如,当输入‘w’+‘回车’时,回车会作为’\n’进入缓冲区等待下一次使用,也就是说main中的循环会执行两次。
解决方法:
函数名: fflush
功 能: 清除一个流
用 法: int fflush(FILE *stream);
fflush(stdin); 清除缓冲区内容。
1 | int main() |
&a为整个数组的地址,类型为int(*)[5],需将其强制转化才可以存进prt指针。因此&a+1为整个数组的指针+1。