科锐课堂笔记:2017/3/6 一维数组与多维数组

  栈溢出错误码是0xC00000FD,造成栈溢的原因是递归次数过多,函数的参数及保存现场信息是存放在栈里的,这部分内容将栈占满了。大部分0xC00000FD的异常是由于递归函数的设计问题引起的,没有设置返回条件判断(或漏了一些)从而造成递归死循环。VC6默认的栈大小是1M,有时候确实因为计算量大递归次数过多,默认栈不够用的话,可以用linker参数“/stack:0xXXXX,0xXXXX”指定栈大小,前一个是保留的栈大小,后一个是提交的栈大小。(在32位平台上最终都会以4字节对齐)


  减少给调用者(理解成导出吧)函数参数的方法,可将函数定义为一个代理函数,代理函数将调用真正的内层函数完成功能,这样做的好处在设计上使用了分层,参数的检查、转换、传递可由外部代理函数实现,内部函数只需完成功能代码。


  编译后生成与CPU相关的二进制目标文件,目标文件与平台是无关的。链接的过程将各目标文件合并生成针对某平台的可执行文件。


  数组是同类型数据的集合,在一次编译的语言中(如C/C++),数组的长度定义必须是常量或常量表达式(能在编译前计算出),且数组的赋值只能在定义时,赋值数组的内容可以是常量、变量或函数等。(因为赋值动作是运行时完成的)
  线性是逻辑概念,连续是物理描述。
  数组换算公式:首地址(指针)+下标(整型)*sizeof(数组类型)。
  举例有int a[5] = {1,2,3,4,5}:
  那么a[2]等同于2[a],在C语言中[]运行符,接受一个指针与一个整型,前后顺序无关,所以a[2]和2[a]都会转换成上面的公式,算出的地址值是一样的,取值结果都是3。


  类似的二维数组被转换成:首地址(指针)+下标1(整型)*sizeof(数组类型[定义的第二维的元素个数])+下标2(整型)*sizeof(数组类型)。如有一个int a[3][5];可知a[1][2]=1[a][2],但不等于1[2][a],编译器是一级一级运算的,先算1[2],发现两个都是整型便会报错了。
  其实二维、多维本质上都可以看成一维数组,多维数组只是在逻辑上的概念让人们更容易理解与记忆,在内存中都是以一维数组的形式存储的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值