数组的基本认识和内存分配

1.是如何分配内存的

栈可以算是受限的线性表。它只允许在表的一端进行数据的输入,删除操作。放入数据的入口即为栈的栈顶,将数据压入栈后,数据所存在的位置即为栈的栈。它在进行插入和删除工作时必须从栈顶元素入手,即就是先进栈的元素后出栈,即先进后出。添加新元素时,可直接将新元素压在栈顶元素之上,而此时的新元素会代替之前的栈顶元素成为栈顶元素。而进行删除操作时,也必须从栈顶元素入手,如需删除的是栈顶元素,则直接从栈中将栈顶元素取出,那么下一个相邻元素则成为栈顶元素,如果所要删除的数据是非栈顶元素,则需将此元素之前的元素依次取出,然后此元素就变成了栈顶元素,做法同上,然后再将之前取出的元素以取出时的逆顺序依次放入。

栈区是由编译器自动分配和释放,存放函数的参数,局部变量等,程序员无法控制。栈存储数据时是从高地址向底地址扩展的结构,是一块连续的内存区域。栈的大小也并不是无限大的,取决于栈的剩余空间,如果申请空间小于栈的剩余空间,则系统将会为申请空间分配内存,否则将报异常提示栈溢出。

2. define和const的区别

Define在定义常数时(也可定义简单函数),没有类型,只是简单的符号代替(不做计算  不做表达式求解),无类型检查,它作用于编译的预处理阶段,在预处理之后 它会占用代码段的空间,因为在预编译时已经进行了替换,所以define之后不能进行调试。

const在定义常数时(只能定义一些简单常量),有类型,在进行替换时也带类型,有类型检查,以免发生错误。const不可重复定义,它作用于编译运行时,在运行时,它只占用数据段空间,const常量可以进行调试。const常量只对文件内有效,多个文件同时定义同名的const常量,它们将独立作用,如果在多个文件中共享const文件,就必须在变量定义之前加上extern关键字(在声明和定义时都要加)

3. 数组如何做函数参数

数组元素的作用与变量相当,一般来说,凡是变量可以出现的地方,都可以用数组元素代替。因此数组元素也可以作为函数实参,其用法与变量相同,向形参传递数组的值。此外,数组名也可以做实参和形参,传递的是数组第一个元素的地址。数组元素可以用作函数实参,不能用作函数形参。因为形参是在函数被调用时临时分配存储单元的,不可能为每个数组元素单独分配存储单元(数组是一个整体,在内存中占连续的一段存储单元)。

用数组元素作为实参时,向形参变量传递的是数组元素的值,而用数组名做函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址(即就是形参类似于一个指针 指向数组首元素的地址)。

注:用数组名做函数实参时,不是把数组元素的值传递给形参,而是实参地址的首元素的地址传递给形参数组。

4. sizeof()的用法

     Sizeof()是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位)在C语言中,sizeof()是一个判断数据类型或者表达式长度的运算符,对sizeof()的处理是在编译阶段进行的。

5. 数组和指针之间访问数组内的元素

     例如:数组arr[]={1,3, 5, 6, 7, 8} 中共有有六个数组元素,每个数组元素占有四个字节的空间大小。

&arr就指的是第一个数组元素的存储地址

&arr+1指的是整个数组的下一个元素地址(即就是数组最后一个元素的下个元素的地址)

*(arr)指的是数组的第一个元素的值

*(arr+1)即就是数组第二个元素的值

&arr, arr的区别:

      arr指的是数组对象,指代整个数组,arr在多数情况下会隐式转换成&(arr[0])为指针类型。&arr为指针类型,指的是数组首地址(即就是数组首元素的地址)。arr和&arr不同类型,但数值是相同的原因是arr和arr[0]的地址相同。

6. 字符‘0’  字符‘\0’  和  整数0    的区别

字符‘0’:char c=’0’ 它的 ASCII码实际上是48.

字符‘\0’: ASCII码为0,表示一个字符串结束的标志。这是转义字符。

整数 0  :ASCII码为0,字符表示为空字符,NULL;数值表示为0。

7. 数组何时分配内存以及什么时候确定其大小

  静态数组(静态局部变量,文件级静态变量,全局变量)在编译时分配内存。

  局部自动变量和局部自动对象(复合语句,函数体)的代码块执行之前在栈中动态分配。如果是较大的数组,就对栈的的空间要求就很高         了,那么就可以改用指针,然后就在堆中分配。然后系统在编译时确定数组的大小,在运行时才会分配数组的内存。(即就是在编译时系统确认有此数组,并且进一步了解数组的大小,但只是记住有这么一号人物而已,至于如何安排就在运行时分配适当的内存)

如有不对 请指正

猜你喜欢

转载自blog.csdn.net/weixin_41197086/article/details/81566717