函数递归与一维、二维数组

tips

1.VS里面的解决方案是什么呢?首先要搞清楚解决方案与项目的区别,一个解决方案中可以有多个项目.

2.函数递归的时候一定要有限制条件,并不完全等价于数列的递推公式,光有限制条件还不够,递归在运行的时候必须朝着这个限制条件接近。

3.因此函数递归要注意以下几点:
1,先假设那个函数的功能是成立的。
2,把An个过程分为A(n-1)个过程加上其他过程。
3,一定要加上限制条件,并且随着递归的进行,要不断的逼近这个限制条件,最终让递归停止。

4.当你写下
char arr[ ]="abcdef"时,arr这个字符数组里面有七个元素,分别为‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘f’ ‘\0’。

5.C语言中两个变量交换内容一定需要另外一个临时变量。

6.数组传参,形参可以用数组来接收,这是没有任何问题。并且并不会额外又去创建一个数组,用的还是你传进来的数组,形参这儿的数组与实参的数组是同一个数组,不管你数组名字有没有变化,数组传参的时候就是这样一个效果。

7.实际上我想告诉你的是什么呢?数组名其实是地址,是数组首元素的地址,这是一个结论。当你把数组名传进来的时候,传来的是首元素的地址。这时候形参可以用指针来接收,这个指针指向的也是数组首元素的地址了,并且只要知道了首元素的地址,就可以顺藤摸瓜找到后面的所有内容。

8.“%p”就是专门用来打印地址的

数组

数组基本知识

1.数组是一组相同类型元素的集合

2.创建数组的同时给数组一些值,这就叫做数组的初始化。初始化又分为完全初始化(就是说把数组的每一个元素都给它值),不完全初始化(剩余的元素默认初始化为0)。
给数组初始化的时候,大小可以不指定,那个大小不指定的时候,系统会根据你的初始化内容来确定你的数组元素个数。

3.当字符数组不完全初始化的时候,剩余的元素默认初始化为0。由于\0的ACSII码值为0,因此剩余的元素在字符数组当中被解读成\0了。

4.尤其不要忘记如字符串“abcd”,它的后面还带了一个\0,如果没有\0的话,在打印字符串与计算字符串长度的时候都会受到影响。

 

5.字符串的打印和长度计算都是以/0为结束标志的,如果在打印或者计算长度的过程当中碰不到/0,那就会一直运行下去,直到找到/0为止。

6.全局变量可以全局数组一样 当不初始化的时候,默认初始化都为0。

一维数组的访问与使用

1.对于数组的使用,我们之前介绍了一个操作符[ ](下标引用操作符),它其实就是数组访问的操作符,数组的下标是怎么样的,你懂的。

2.数组的大小(里面元素的个数)可以通过计算得到:sizeof(arr)/sizeof(arr[0]),

特别的,字符数组的大小可以通过strlen来求

但两者还是有差别,你要知道他们运作的原理,strlen()是碰到\0就会停下来的。

 

一维数组在内存当中的存储

 

 仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。

一维数组在内存当中是连续存放的。随着数组下标的增长,地址是由低到高变化的。因此只要得到数组的首元素地址,就可以根据它的存储规律,顺藤摸瓜,找到后面所有元素的地址。

接下来这个内容非常关键

一个整形(int)在内存当中占了四个字节。由于一个内存单元占一个字节,相当于一个整型int在内存当中占了四个内存单元(每一个内存单元都有他自己的一个地址编号,这个地址\指针是8个16进制表示的) 

在数组里面考虑指针的时候,不用去考虑每个内存单元的地址,只需要把目光聚焦到每个元素的地址这一层即可,虽然每个元素可能占多个字节/内存空间,但是以第一个内存空间的地址为该元素的地址。

整形指针加一,其指向的元素就会跳过一个整形。字符指针加一,其指向的元素就会跳过一个字符

 

操作:利用指针来遍历一维数组:

二维数组

1.二维数组其实就是多行多列的,比如三行四列,二行四列,在这里面放数字的时候是一行一行往下放的。

2.二维数组的行是可以省略的,但是列不能省略。当行省略的时候,编译器由于知道了每行的元素个数,他也会自己排下去的,但是列不能省略。

3.二维数组的访问也是通过下标来实现,二维数组有行号和列号,都是从零开始

二维数组在内存当中的存储

1.二维数组在内存当中也是连续存放的

 如下:

 

正是因为数组在内存当中是线性存放的,因此要遍历数组元素的话,通过下标或者指针都是可以的

二维数组其实也是一维数组的数组,只要把每一行都想象成一维数组

利用指针遍历二维数组

二维数组的行数的求法: sizeof(arr)/sizeof(arr[0]),
二维数组的列数的求法: sizeof(arr[0])/sizeof(arr[0][0])

总之,二维数组在平时思考过程中把它当作一个矩形来对待,有行号与列号,但是在内存中还是线性依次按行排列的。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

絕知此事要躬行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值