C语言重要概念汇总

作者:郭孝星

微博:郭孝星的新浪微博

邮箱:[email protected]

博客:http://blog.csdn.net/allenwells

Github:https://github.com/AllenWells

一 基本概念

1.1 关键字static的作用

  1. 在函数体。一个被声明为静态的变量在这一函数被调用的过程中维持其值不变。
  2. 在模块内(但在函数体外),一个被声明为静态的变量能够被模块内所用的函数调用,但不能被模块外的其他函数訪问。它是一个本地的全局变量。
  3. 在模块内,一个被声明为静态的函数仅仅能够被这一模块内的其他函数调用。那就是这个函数被限制在它的模块的本地范围内使用。

1.2 引用和指针的差别

  • 引用变量必须初始化,指针不必。

  • 引用初始化以后不能被改变。指针能够改变所指的对象。
  • 不存在指向空值的引用,可是存在指向空值的指针。

1.3 #include

1.4 全局变量和局部变量在内存中存放位置的差别

全局变量存放在静态区中,局部变量存放在堆栈中。

1.5 堆栈溢出的原因

  • 没有回收垃圾资源。

  • 层次太深的递归调用。

1.6 引用一个已经定义过的全局变量

  • 引用头文件的方式。假如定义的那个变量出错,那么编译器就会报错。
  • 用extern关键字方式引用。假如定义的变量出错,则编译器间不会报错,而在连接期间报错。

1.7 全局变量能否定义在多个.c文件包括的头文件里

能够。在不同的.c文件里以static形式来声明同名全局变量。前提是当中仅仅能有一个C文件对此变量赋初值,此时连接时不会出错。

1.8 for( ; 1 ; )是什么意思

和while(1)同样,无限循环。

1.9 static 全局变量、局部变量、函数与普通全局变量、局部变量、函数

全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式,两者在存储方式上并无差别。而非静态全局变量在各个源文件里都是有效的。而静态全局变量则仅仅在定义该变量的源文件有效。static全局变量值初始化一次,防止在其他文件单元中被引用。

因此,把局部变量改成静态变量后改变了它的存储方式即该变了它的生存期。而全局变量改成静态变量后改变了它的作用域,限制了它的使用范围。

static局部变量仅仅初始化一次,下一次根据上一次的结果值。

static函数与普通函数的作用域不同,仅在本文件。仅仅在当前文件里使用的函数应该说明为内部函数。static函数在内存中仅仅有一份。普通函数在每一个调用中都维持一份拷贝。

1.10 程序的内存分配

  • 栈区(stack):由编译器自己主动分配释放,存放函数的參数值。局部变量的值,其操作方式相似于数据结构中栈。
  • 堆区(heap):一般由程序猿分配释放。若程序猿不释放, 程序结束时可能有操作系统回收。它与数据结构中的堆是不同的。其分配方式相似于链表。
  • 全局区(静态区static):全局变量和静态变量的存储是是放在一块的。

    初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和静态变量放在响铃的还有一块区域。

  • 文字常量区:存放常量的字符。程结束后由统释放。
  • 程序代码区:存放函数体的二进制代码。

举例

int a = 0;        //全局初始化区
char *p1;        //全局未初始化区
main()
{
    int b;
char s[] = “abc”;  //栈
char *p2;       //栈
char  *p3 = “123456”;
static int c = 0;   //全局初始化区
p1 = (char *)malloc(10);
p1 = (char *)malloc(10);    //分配分配得来10和20字节区域在堆区
strcpy(p1, “123456”);      //123456\0放在常量区。编译器可能将它与“1223456”优化成一个地方。

} 

1.11 堆和栈的差别

申请方式

  • 栈:由系统自己主动分配。

- 堆:由程序猿申请,并指明大小。

C:p1 = (char *)malloc(10);
C++:p2 = (char *)malloc(10);

注意:p1和p2本身是在栈中。

申请后系统的响应

  • 栈:仅仅有栈的剩余空间大于申请的空间。系统将为程序提供内存,否则将提示栈溢出。
  • 堆:首先系统中会有一个记录空暇内存地址的链表。系统受到程序的申请时会编立该链表,寻找第一个空间大于所申请的堆结点,并把该结点的空间分配菲程序。

    同一时候,系统会在这块内存空间的首地址记录本次分配的大小,这样delete语句才干正确的释放本内存空间。

    另外。由于找到的堆结点的大小并不一定正好等于申请的大小,系统会自己主动的将多余的那部分又一次放入空暇链表中。

1.12 指针数组与数组指针

int(*p)[4],这个就是行指针这样的类型的指针p是指向一个一维数组。这个一维数组包括4个整形元素。

可是 int a[4];p=a; 这样的方式却是不正确的由于p仅仅能指向一个整型的一维数组,不能指向一个整型数据,a所指向的正是a[0]。是个整型数。

实际上int(*p)[4]这样的类型的指针是用于多维数组中的。比方定义一个二维数组int b[3][4],就能够这样赋值p=&b[0],使p指向一维数组b[0],并且p的增减是以一维数组的长度为单位的,比方p+1指向的就是b[1]了

int *p[4]这个是指针数组了,首先弄明确这个是数组,里面存放的是指针也就是地址。这个地址所指向的是一个整型数据。你能够把p[0],p[1]….当作一个个的指针变量来使用。

时间: 2024-10-06 06:19:57

C语言重要概念汇总的相关文章

DBA_Oracle DBA分区概念汇总(概念)

2014-06-20 BaoXinjian 一.摘要 有关表分区的一些维护性操作: 注:分区根据具体情况选择. 表分区有以下优点: 1.数据查询:数据被存储到多个文件上,减少了I/O负载,查询速度提高. 2.数据修剪:保存历史数据非常的理想. 3.备份:将大表的数据分成多个文件,方便备份和恢复. 4.并行性:可以同时向表中进行DML操作,并行性性能提高. 二.分区操作 1. 添加分区 以下代码给SALES表添加了一个P3分区 ALTER TABLE SALES ADD PARTITION P3

C语言基本概念

1. 标准C语言 C语言诞生于20世纪70年代,年龄比我们自己还要大,期间产生了很多标准,但是各种编译器对标准的支持不尽相同. ANSI C是使用的最广泛的一个标准,也是第一个正式标准,被称为“标准C语言”.ANSI C于1980年由美国国家标准局(American National Standards Institute,简称ANSI)对外发布,各种编译器几乎都完整支持ANSI C,市面上的书籍.大学里的教材.网上的教程大都以ANSI C为基础进行讲解,C语言中文网也不例外,也以ANSI C为

《C语言程序设计:现代方法(第2版)》第2章 C语言基本概念

第2章 C语言基本概念 某个人的常量可能是其他人的变量. 本章介绍了C语言的一些基本概念,包括预处理命令.函数.变量和语句.即使是编写最简单的C程序,也会用到这些基本概念.后续几章将会对这些概念进行更详细的描述. 首先,2.1节给出一个简单的C程序,并且描述了如何对这个程序进行编译和链接.接着,2.2节讨论如何使程序通用.2.3节说明如何添加说明性解释,即通常所说的注释.2.4节介绍变量,变量是用来存储程序执行过程中可能会发生改变的数据的.2.5节说明利用scanf函数把数据读入变量的方法.就如

JAVA理论概念大神之概念汇总

我个人觉得,JAVA之所以能够经久不衰,有一个很重要的原因就是:JAVA的理论总是给人一种,虽然不知道是什么,但是感觉很厉害的样子.就单是这一点,他就已经超越许多其他语言了,至少吹牛的时候谈资总是很多. 废话不多说(其实一整篇都是废话),今天就来汇总一下,一些个人见识的概念(都是从项目中挑选出来的,能力有限数量也有限),请多多指教! 1. 面向对象编程 这个虽然不是什么特别的东西,但是却是JAVA的立身之本.万事万物皆对象.那面向对象,基本功能好处就是,封装.继承.多态等. 2. 面向切面编程

多媒体技术基本概念汇总

多媒体技术这门课中我们将会学到如何使用音频,视频,图片等资源来进行处理.下面的资料是我在大学阶段整理的多媒体技术的基本概念,希望对大家有所帮助. 多媒体技术期末知识点汇总 多媒体技术的主要特性有:(1)(2)(3)      //该题可以为选择题.填空题.简答题 多样性 集成性 交互性 可扩充性 多媒体计算机中的媒体信息是指:(1)(2)(3)(4) //该题可以为选择题.填空题.简答题 数字.文字 声音.图形 动画.视频 图像 多媒体计算机的发展趋势是:(4)        //必考题!是简答

汇编语言基本概念汇总

汇编语言应该是我们现在学的最"低级"的语言了,因为现在不会再有人去学机器语言了.而汇编语言还在一些硬件或者嵌入式设备上使用并开发着.以下资料是为了大学的汇编考试整理的资料,现在与大家分享,希望能给大家提供帮助. 汇编语言程序设计汇总 计算机主要由运算器.控制器.存储器和输入输出设备五大部件构成. 字长word是指微处理器内部一次可以并行处理二进制代码的位数,它与微处理器内部寄存器以及CPU内部数据总线宽度是一致的,字长越长,所表示的数据精度就越高. 内存是由若干个存储单元组成,每个单元

SQL语言基本概念

一.SQL语言简介 当面对一个陌生的数据库时,通常需要一种方式与它进行交互,以完成用户所需要的各种工作,这时候就需要使用SQL语言了.SQL(Structured Query Language)结构化查询语言,最早是由IBM在20世纪70年代开发出来,为的是IBM的关系数据库管理系统SYSTEM R开发的一种查询语言.SQL结构简洁,功能强大,简单易学,所以自从其出现,SQL得到了广泛的应用.20世纪80年代初,美国国家标准局(ANSI)开始着手定制SQL标准,当前的SQL标准已经几经修改,更趋

UML软件建模学习与开发基本概念汇总

UML,统一建模语言,对于软件工程专业的学生而言,是一门非常重要的技术,对于从事软件行业的的开发人员,设计人员等等,更是不可或缺的,同样是为了大学阶段的非常boring的考试,花费了不少时间整理考试资料,现在和大家一起分享. 真题汇总 1. 什么是用例图?用例图有什么作用? 定义:由参与者.用例以及他们之间的关系构成的用于描述系统功能的图称为用例图. 作用: (1) 用例图是从软件需求分析到最终实现的第一步,它显示了系统的用户和用户希望提供的功能,有利于用户和软件开发人员之间的沟通. (2) 用

程序设计语言基本概念语 与经典真题

一.基本概念 在计算机中,程序设计语言可划分为低级语言和高级语言两大类,与高级语言相比,用低级语言开发的程序,其运行效率高,但开发效率低.与程序设计相关的基本概念如下. (1)低级语言:又称面向机器语言,它是特定的计算机系统所固有的语言. (2)汇编语言:是机器语言的一种提升,它使用了一些助记符来表示机器指令中的操作码和操作数.但它仍然是一种和计算机机器语言十分接近的语言,使用起来仍然不太方便. (3)高级语言:与人们的自然语言比较接近,使用起来很方便,也极大的提高了程序设计效率. (4)编译程