关于数组的操作:
初始化:
完全初始化:
Int a[5] = {1,3,4,5,6};
不完全初始化: 未被初始化的元素自动为零
Int a[5] = {1, 3, 4};
不初始化, 所有元素是垃圾值;
Int a[5];
清零:
Int a[5] = {0};
多维数组: 不存在多维数组:因为内存是线性一维的
比如 int a[3][4] 该数组是含有3个元素的一维数组 只不过每个元素都可以再分为4个小元素。。。。
函数:
数组中的变量叫元素 函数中的变量叫形参
避免了重复性操作; 有利于程序的模块化;;;;;
相对独立的功能 用一个函数表示;;;;;
函数:
逻辑上:能够完成特定功能的独立代码块
物理上:能够接收数据 能够对接受的数据进行处理 ;能够将数据处理的结果返回(当然也可以不放回任何值)
总结: 函数是个工具,他是为了解决大量类似问题而设计的;
函数可以当做一个黑匣子;
函数的返回值的类型:函数最终返回值的类型 以函数名前的返回值类型为准。
Return表达式的含义:
1:终止被调函数,向主调函数返回表达式的值。
2:如果表达式为空,则只终止函数,不想被调函数返回任何值。。。
函数的分类:
有参函数和无参函数:
有返回值函数和无返回值函数
库函数和 用户自定义函数
普通函数 和 主函数(main函数) 一个程序必须有且只有一个主函数
主函数可以调用普通函数 普通函数不能调用主函数。。。
主函数是程序的入口 也是程序的出口。。
函数的声明:::
主义的问题:
函数调用核函数定义的顺序
如果函数调用写在了函数定义的前面,则必须加函数声明;
函数前置声明:
1:告诉编译器即将可能出现的若干个字母代表的是一个函数
2:告诉编译器即将可能出现的若干个字母代表的函数的形参和返回值;
3:函数声明是一个语句,末尾必须加分号;
4:对库函数的声明是通过#include <库函数所在的文件的名字.h>来实现
形参和实参
个数必须相同 位置一一对应 类型相互兼容;
变量的作用域和存储方式:
按作用域分:
全局变量:在所有函数外部定义的变量叫做全局变量
局部变量:只能在本函数内部使用
安变量的存储方式
静态变量
自动变量
寄存器变量
如果全局变量和局部变量相同时 局部变量就会屏蔽掉全局变量;;;
指针::::指针就是地址 就是内存单元的编号
指针 表示一些负责的数据结构 快速的传递数据 是函数返回一个以上的值
能直接访问硬件 能够方便的处理字符串 是理解面向对象语言中引用的基础
*指针运算符:
该运算符放在已经定义好的指针变量的前面
如果p是一个已经定义好的指针变量
则*p表示 以p的内容为地址的变量
如何通过被调函数修改主调函数普通变量的值
1:实参必须为普通变量的地址
2:形参必须为指针变量
3:在北调函数中通过
*形参名 = 。。。
的方式就可以修改主调函数的值
一个指针变量所占的字节数:
Sizeof(数据类型)
功能; 返回值就是该数据类型所占的字节数
例子: sizeof(int) = 4 ; sizeof(char)=1; sizeof(double) = 8;
一个指针变量,无论它指向的变量占几个字节 该指针变量本身只占四个字节
一个变量的地址使用该变量首字母字节的地址来表示。。
动态内存:::*****************************************
传统数组的缺陷:
1:数组长度必须先制定, 且只能是长整数, 不能是变量
2:传统形式定义的数组, 该数组内存程序员无法手动释放 在一个函数运行期间,系统为该函数中数组所分配的空间会一值存在,直到该函数运行完毕时,数组的空间才会被系统释放掉。。
3:数组的长度不能在函数运行的过程中动态的扩充或缩小
数组的长度一旦定义,其长度就不能再更改。
4:A函数定义的数组,在A函数运行期间可以被其他函数使用,但A函数运行完毕之后,A函数中的数组将无法再被其他函数使用。
动态数组很好的解决了传统数组的缺陷
传统数组也叫静态数组。。。。
1:使用malloc函数,必须添加malloc..h这个头文件里,malloc函数中只有一个形参,并且形参是整形。。
个字节静态分配
Int * p = (int *)malloc(4);
动态内存和静态内存的比较
静态内存是由系统自动分配, 由系统自动释放
静态内存是在栈分配的。。
动态内存是有程序员手动分配的, 手动释放的
动态内存是在堆内存分配的。。
跨函数使用内存::::*********************************************************
Int * p -----p里边只能存放intl类型变量的地址。。。。
&p 的地址类型为 int ** 类型的。。
结构体*************************************************************************
为了表示一些复杂的事物,而普通的变量类型无法满足实际要求
把一些基本类型数据组哈在一起形成的一个新的复合型类型数据,这个叫结构体。。。。。
如何取出结构体变量中的每一个成员
1: 结构体变量.。成员名
2:指针变量名->成员名
枚举**************************************************************************
把一个事物所有的取值一一列举出来便就是枚举;;;;;;;;;
补码:::*********************************************************************
在Vc++6.0中一个int类型的变量所能存储的数字的范围是多少?
原码: 也叫符号-绝对值码
表示正 1表示负,其余二进制位表示该数字的绝对值的二进制位。。。
原码简单易懂。 加减运算复杂。 存在加减乘除四中运算 增加了cpu的复杂度
零的表示不唯一
反码: 反码运算不方便 也没有在计算机中应用
移码:移码表示数值平移n位,n称为移码量。。
移码主要用于浮点数的阶码的存储
补码: 正整数转二进制
取余, 直至商为零, 余数倒叙排序
负整数转二进制:
, 不够位数时 左边加1;;;;;
求零的二进制
全是零
已知二进制求十进制
, 则表明是正整数,按普通方法来求。
,则表明;是负整数
, 所得数字就是该负数的绝对值
如果全是零, 则对应的十进制数字就是零。。。。
链表:
算法:
通俗定义:
解题的方法和步骤
狭义定义:
对存储数据的操作
广义定义:
广义的算法也叫泛型。。。
我们至少可以通过两种结构来存储数据:
数组:
优点:
存取速度快。
缺点:
需要一个连续的很大的内存。
插入和删除元素的效率很低。。
链表:
位运算符:::
1,什么是分配内存 什么叫释放内存。。。
把内存里的一块控制区域交给程序。 把使用权限给程序。。
这一块内存的控制权限 又交给操作系统。。
操作系统把某一块内存空间的使用权利分配给程序,这个叫分配内存
操作系统把分配给改程序的内存空间的使用权限收回,改程序就不能够在使用这一块内存空间。这叫释放内存。。
释放内存不是吧该内存的内容 清零。。
2. 变量为什么必须初始化。。
不初始化,则变量通常就是垃圾值。。。。
3. 详细说明系统是如何执行的 int i = 5; 这个语句。。
存储到i所关联的这块区域中。。
所谓内存区域就是内存中的一块存储单元。。。。
4,。详细列出c语言的所有基本类型
Int longint shor int char float double
5. 在printf函数中 int 用%d输出,,
Char 用 %c double 用%lf float 用%f.
6. 函数的优点是什么。。。。
避免重复性操作
有利于程序的模块化。。。。
7. 什么事指针 什么是地址 什么是地址变量 三者之间有什么关系。。。
地址是内存单元的编号。指针就是地址 指针和地址是同一个概念
指针变量就是存放内存单元编号的变量, 指针变量和指针是两个不同的概念,,,
只不过人们通常把指针变量称为指针。。
8. 请写出静态变量和动态变量的异同
相同:
都需要分配内存
不同:
静态变量是由系统自动分配,自动释放,程序员无法在程序运行后手动分配。
也无法在程序运行的过程中手动释放
静态变量是在栈中分配的。。
函数终止之后,静态变量的存储空间才会被系统自动释放。。
动态变量是有程序员手动分配的, 手动释放的。 程序员可以在程序运行过程中手动分配。也可以在程序运行过程中手动释放。
动态变量是在堆中分配的。。
程序员可以在函数执行的过程中的认可一个时刻手动的释放动态变量的空间,不需要等到函数终止时才释放。。
9. c语言中哪些知识是我们学习的重点。。 列举出来。。。。。。
函数 流程控制 指针 内存分配 静态内存 和 动态内存 。。
二进制全部为零的含义::: --0000000000000000 的含义:
1: 数值为零
2: 字符串结束标记
3: 空指针NULL...
NULL表示编号为零的地址。。。。。 NULL表示的是零 而这个零不代表数字零。二代表的是 内存单元的编号--零。。。。。
我们计算机 规定了 以零为编号的存储单元的内容不可读 不可写。。
函数可以嵌套调用但不能嵌套定义。。。。*********************。。
版权声明:本文为博主原创文章,未经博主允许不得转载。