数组初步定义(数组中每一个元素下标从0开始数,最大下标为数组个数-1)
例1.如何写一个程序计算用户输入的数字的平均数,并输出比平均数大的所有数字
![](https://i-blog.csdnimg.cn/blog_migrate/27aca23adced8d0fa24ef9c3e0763ce8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8f006e71e70848789446b55138b9f725.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/5cad26490e79849e18b7fd14a7c95db4.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/592d31594791c24b0743fb7396c86b89.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/d30d2427bf70a35ca8a7f66931ea631e.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/04edb2a97983a32f0501c2363b7a618d.jpeg)
数组在使用前需要先定义然后给每一个元素初始化(用循环)下面是如何用数组写一个一定范围内出现的数的个数
![](https://i-blog.csdnimg.cn/blog_migrate/4fe72738d168d9c4935ad617af823531.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4a600faadbafd8cefc370872fd9b106c.png)
动态内存分配(malloc函数是给变量一块空间,返回值为空,在前面加int*转换)结束后要free,把空间还给系统 ,运用动态内存分配可以由scanf决定数组大小
![](https://i-blog.csdnimg.cn/blog_migrate/59ecdab1537d822e657c9fa535f21149.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d8ccb2cdba829b3681775c000ecb60d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/344d52ab9164b3621a76265e7b0d1579.png)
数组运算
![](https://i-blog.csdnimg.cn/blog_migrate/9e519c2ac7889db0bf3b8baee6657671.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a125cea2bb0bd51c1f60c1732f36b440.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b6fcb7b9cd61e91854c9fa21d2bc5e6b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7e74035e1b1b89bdc074f7ab8660f128.png)
数组之间不能进行赋值,只能用一个数组遍历另一个数组的方法
![](https://i-blog.csdnimg.cn/blog_migrate/ddd9d103a29c3dd864f50577767507a5.png)
当一个函数中涉及数组时(数组大小为sizeofa{}/sizeofa{0})
![](https://i-blog.csdnimg.cn/blog_migrate/75c872c69f71afadf6fbdbcc4f7e38e1.png)
二维数组(相当于矩阵)
![](https://i-blog.csdnimg.cn/blog_migrate/58e0c7c75b19d65a3f212798b59fcdaf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/65552fd995c3861c33ffb0a6aca241b1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4382e12eb4ba96ca2a5cdc3de48a909b.png)
tic-tac-toe游戏
![](https://i-blog.csdnimg.cn/blog_migrate/081aa82cc967e778a902c927a7661c1e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b8309f0ee13d5f70c5561cf1abc5997f.jpeg)
取地址符&的详说(获得变量的地址)数组就是特殊指针,定义了char str[],则str就是一个带有地址的变量也就是指针
![](https://i-blog.csdnimg.cn/blog_migrate/87e43d400eae1746695971e37b76dbbc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/589cafb789f3f6fa81492c4cdfe2508b.png)
相邻变量的地址往往从上往下排序,即先定义的变量比后定义的字节多四;一组数组的地址(数组是特殊的指针)![](https://i-blog.csdnimg.cn/blog_migrate/370feb07ac340ecf3e5058ae8cde387a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d7b8fc12684f1db86034fc6755419906.png)
指针(保存变量地址的一个变量),指针变量的值是具有实际值的变量的地址
![](https://i-blog.csdnimg.cn/blog_migrate/df93dde7e662ebe538cbd89e6df0d68b.png)
注:*号是对p起作用,与int无关;定义一个指针时要在前面加上*号
当指针作为参数时,在被调用时要的是一个变量的地址而不是这个变量或这个变量的值
![](https://i-blog.csdnimg.cn/blog_migrate/9ff469f814e45768cf1df39bbe3ec8fe.png)
注:指针在定义时一定要指向一个变量的地址![](https://i-blog.csdnimg.cn/blog_migrate/e26ad942ffa154dc0ae6b9d8fd8d967d.png)
常见错误:
![](https://i-blog.csdnimg.cn/blog_migrate/4e0c1786c05b16b9d36f88b4ed2e7f72.png)
指针的使用![](https://i-blog.csdnimg.cn/blog_migrate/0629847fc815963b0418691a42f41edf.png)
可以用指针传递去访问不同块内的变量
![](https://i-blog.csdnimg.cn/blog_migrate/a0d67dfe30421b7eea01bf44539a01ed.png)
指针应用场景(文件已保存)
![](https://i-blog.csdnimg.cn/blog_migrate/3b0c9038722676679974c53f76757d47.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e351cba4ba939b8bf8003a16d6150340.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3e58ee3f5b1b264edc2189df4a8b705e.png)
指针运算
一个指针加一是在地址值上往后挪了一个位置,即加了一个sizeof(指针类型,int就加4,char就加1)
一个数组的某个元素加一(数组是特殊的指针),就代表这个元素的下一位![](https://i-blog.csdnimg.cn/blog_migrate/e485f05e52a2bb933ccbd826cb8c66ee.png)
两个指针的减法得到的是:两个地址的差/变量的sizeof,即做减法是看这两个指针中间有多少个同类型的变量
*p++运算是由于++优先级大于*,先取出p的地址在进行p++,常用于数组的空间性的连续操作![](https://i-blog.csdnimg.cn/blog_migrate/ad73c759b3f3525b242f6ebd07791143.png)
指针比较![](https://i-blog.csdnimg.cn/blog_migrate/2da35a8a96e44c343fc1cafcfa1aec3d.png)
不同指针间不能进行赋值
![](https://i-blog.csdnimg.cn/blog_migrate/2538d3c0d183a4d7688ecf1deda4161f.png)