C语言的那些事儿
- 格式:doc
- 大小:832.15 KB
- 文档页数:46
程序设计语言及特点嘿,朋友们!今天咱就来聊聊程序设计语言那些事儿。
你说这程序设计语言啊,就像是我们手里的魔法棒,可以变出各种各样神奇的东西呢!比如说 C 语言,那可是老大哥级别的存在呀,就如同一位经验丰富的工匠,能打造出坚固耐用的作品。
它虽然有点严格,要求多多,但用它做出的东西那质量可是杠杠的!很多底层的重要系统可都离不开它呢。
再看看 Python 呀,这可真是个贴心的小宝贝呢!它就像一个善解人意的好朋友,语法简单易懂,让你能轻松上手。
用 Python 写代码呀,就感觉是在和它愉快地聊天,它能快速帮你实现各种想法,什么数据分析啦、人工智能啦,它都能搞定,厉害吧!还有 Java 呢,那可是企业级的宠儿呀!就好像是一位可靠的卫士,稳定又强大。
大量的企业应用都是用它开发的,它能应对各种复杂的情况,给企业提供坚实的保障。
JavaScript 呢,那就是网页的小精灵呀!没有它,咱们看到的网页可就没那么丰富多彩啦。
它能让网页动起来,变得生动有趣,就像给网页施了魔法一样。
每种程序设计语言都有它的特点和优势呢,就像不同的工具,有的适合砍树,有的适合雕花。
那我们怎么选择呢?这就得看你的需求啦!如果你想搞底层开发,那 C 语言准没错;要是你对数据分析感兴趣,Python 肯定是首选;想进大企业开发大型项目,Java 是个好选择;要是喜欢捣鼓网页,JavaScript 可别错过。
你想想看,要是选错了语言,那不就像拿着斧头去雕花,费力不讨好嘛!所以呀,可得好好琢磨琢磨。
而且呀,学习程序设计语言就像学一门外语,得不断练习才行。
别指望一下子就全会了,那是不可能的哟!得慢慢积累,就像盖房子一样,一砖一瓦地搭起来。
这程序设计语言的世界可真是丰富多彩呀,充满了挑战和乐趣。
咱就像探险家一样,在这个世界里探索、发现、创造。
难道不是很有意思吗?总之呢,程序设计语言是我们打开数字世界大门的钥匙,选对适合自己的那把钥匙,就能在这个神奇的世界里畅游啦!让我们一起加油吧!。
c语言知识点大纲以下是C语言的知识点大纲,适用于初学者和中级水平的学习者:基础概念1.数据类型:整型、浮点型、字符型等2.变量和常量:声明、定义、初始化3.运算符:算术、关系、逻辑、赋值等4.控制流:条件语句(if-else)、循环语句(for、while、do-while)5.函数:声明、定义、调用、参数传递、递归6.数组:声明、初始化、访问、多维数组、数组与指针关系7.指针:地址、指针变量、指针运算、指针和数组、指针和函数8.字符串:字符数组、字符串处理函数、字符串常用操作9.结构体:定义、访问结构成员、结构体数组、结构体指针高级概念10.内存管理:动态内存分配((malloc、calloc、realloc、free)、内存泄漏和内存错误11.文件操作:文件读写、文件指针、文件操作函数12.预处理器:宏定义、条件编译、头文件13.位运算:位操作、位掩码、位运算符14.函数指针:指向函数的指针、回调函数高级主题15.数据结构:链表、栈、队列、树、图等16.算法:排序算法((冒泡排序、快速排序等)、搜索算法((线性搜索、二分搜索等)17.指针与内存:内存布局、内存对齐、指针算术18.多线程编程:线程、同步与互斥、线程安全性19.网络编程:Socket编程、TCP/IP、HTTP协议20.C标准库函数:常用函数库((stdio.h、stdlib.h、string.h(等)实践和应用21.项目开发:使用C语言构建小型项目或工具22.调试和优化:学习调试技巧、代码优化技巧以上列举的知识点可以帮助你建立起对C语言的基础认识并逐渐深入。
实践是掌握编程语言的关键,因此建议在学习过程中不断地练习并尝试编写各种类型的程序,以加深对C语言的理解和掌握。
《C语言程序设计》教学大纲课时:84课时一、课程简介1.课程简介:学习C语言的意义和价值C语言是专业基础的最后一门课,是各个专业学院学习语言前的第一门基础课。
C语言曾开发出UNIX操作系统等经典复杂系统。
随着物联网、智能终端等技术发展,也用于开发更多应用程序,还具硬件底层执行能力,且易于使用,因此能持久丰富和发展,成为学习掌握各种编程技术的重要基础。
C语言具有相通性与其他语言相比语法结构简单,容易上手是学习掌握其他编程技术的重要基础。
在实际项目开发中往往需要多种语言的相互配合,当需要提高执行效率时或直接操控硬件时,必须使用C语言开发。
2.课程特色:C语言是现代编程的基础。
ANSI标准定义的命令关键字只有32个,运算符34个,程序控制语句也只有9种,这些在学习中都不难理解,也比较易于掌握。
但对初学者来说,每当遇到编程分析以解决实际问题时,就会给不少学生感觉总体上“难”掌握。
学习C语言程序设计,要越过心理“难点”这道坎儿,运用计算思维方法养成习惯是关键:(1)使学生有面向过程的编程思想、面向过程和面向对象的差异;(2)解决初学语言时养成良好的编程习惯,如代码规范、注释规范、流程图规范等;(3)使学生具备良好的编程思路:实际问题—程序算法分析(借助工具)—转换代码通过案例分析和引导,勤动手多实践,训练掌握如何自如地表达实际问题求解过程与程序算法,才能有效编写组织程序,实现相关运算逻辑的计算结果。
计算机程序设计中,掌握知识要点的计算思维方法是核心,通过实验验证则是有效掌握程序算法实现的关键。
二、知识目标1.掌握C语言程序设计基本语法结构和规范.2.掌握C语言程序设计各种数据存储类型,变量的使用及相关运算.3.掌握程序设计的三种基本结构:顺序结构,选择结构,循环结构.4.掌握计算机程序设计算法与实现(1)算法实现工具VISO使用(2)在VISO中实现用例图、流程图5.了解面向过程编程思想,面向过程与面向对象的编程思想的差异6.掌握数组的定义与使用7.掌握函数定义与使用三、能力目标:1.速度目标:用120分钟完成项目—学生成绩管理(1)输入全部学生的成绩(2)输出全部学生的成绩(3)求和(4)求平均值(5)最高分(6)最低分(7)计算成材率2.速度目标:用120分钟完成项目—员工薪资管理(1)输入全部员工的薪资(2)输出全部员工的薪资(3)求所有员工的总薪资(4)求所有员工的平均薪资(5)查找最高薪资(6)查找最低薪资3.速度目标:用3小时完成项目—ATM(1)查询余额(2)取款(3)转账(4)存款(5)退出4.思路目标:使学生具备良好的编程思路:实际问题—程序算法分析(借助工具)—转换代码利用计算机思维去分析问题、解决问题,并利用工具辅助落地四、课程教学和学习设计1.教学特色:优化提炼了所有内容的知识点,通过案例应用来解析相关的知识要点和程序算法实现方法,以及相关的语义语法基本规范等。
c语言经典语录摘要:1.C 语言简介2.C 语言的经典语录3.为什么C 语言经典语录如此受欢迎4.总结正文:C 语言是一种广泛应用的编程语言,自20 世纪70 年代由丹尼斯·里奇(Dennis Ritchie)在贝尔实验室开发以来,它已经成为了计算机领域中最重要的编程语言之一。
C 语言的设计理念是简单、高效和可移植性,这使得它非常适合编写系统级别的软件和底层驱动程序。
C 语言的语法和编程风格也影响了后续许多编程语言的设计。
在C 语言的世界里,有许多经典语录被广大程序员所熟知和喜爱。
这些经典语录不仅揭示了C 语言的特性,还蕴含着深刻的编程思想。
以下是一些脍炙人口的C 语言经典语录:1."C 语言是一个伟大的语言,因为它使得我们能够用一种比用汇编语言更低级的方式来思考问题。
"(C is a great language because it allows us to think at a lower level than assembly language would.</br>)2."C 语言是一把瑞士军刀,它包含了各种功能,从系统编程到高级抽象。
"(C is a Swiss army knife that includes everything from systems programming to high-level abstraction.</br>)3."C 语言的指针是它的灵魂。
"(Pointers are the soul of C.</br>)4."C 语言的错误处理比其他语言更加复杂,但这使得它更加灵活和强大。
"(C"s error handling is more complex than in other languages, but this makes it more flexible and powerful.</br>)这些经典语录之所以如此受欢迎,是因为它们准确地捕捉了C 语言的核心特性和魅力。
全国计算机二级C语言最重要的知识点总结计算机二级C语言考试是对学生掌握C语言基础知识以及应用能力的综合考试。
以下是全国计算机二级C语言最重要的知识点总结。
一、基础知识点(约占30%)1.基本语法:C语言的基本结构、关键字、标识符、注释等。
2.变量和数据类型:整型、浮点型、字符型、指针等。
3.运算符和表达式:算术运算符、关系运算符、逻辑运算符等。
4.控制语句:条件语句(if-else语句、switch语句)、循环语句(for循环、while循环)、跳转语句(break语句、continue语句)。
5.数组和字符串:一维数组、二维数组、字符数组、字符串处理等。
二、函数(约占20%)1.函数的定义与调用:函数的声明、定义、调用。
2.函数的参数传递:值传递、地址传递。
3.函数的返回值:返回值类型、返回值的使用。
4.递归函数:递归函数的原理与应用。
三、指针(约占15%)1.指针的定义与初始化:指针变量的定义、指针的初始化。
2.指针的运算:指针的加减运算、指针的比较运算。
3.指针和数组:指针与一维、二维数组的关系。
4.指针和函数:指针作为函数的参数、指针作为函数的返回值。
四、文件操作(约占15%)1.文件的打开和关闭:文件的打开模式、文件指针的移动。
2.文件的读写操作:字符的读写、字符串的读写、二进制文件的读写。
3.文件的管理:文件的重命名、删除文件、创建文件夹等。
五、结构体(约占10%)1.结构体的定义:结构体成员的类型和名称。
2.结构体的初始化:结构体变量的初始化、结构体指针的初始化。
3.结构体的访问:点运算符、箭头运算符的使用。
六、动态内存管理(约占10%)1.内存的分配和释放:malloc函数、calloc函数、realloc函数。
2.内存的操作:内存的读写、内存的拷贝。
3.内存泄漏和野指针:内存的释放、野指针的产生和解决方法。
七、综合应用(约占5%)1.数组和字符串处理:冒泡排序、选择排序、字符串操作(拷贝、连接、比较)等。
计算机四种语言知识点总结一、C语言1.基本概念C语言是一种计算机编程语言,也是一种通用编程语言。
它是由贝尔实验室的丹尼斯·里奇在20世纪70年代初设计的,旨在开发UNIX操作系统。
C语言是一种结构化语言,它的语法相对简单,程序员可以用比较少的代码来完成比较复杂的任务。
2.特点及应用领域C语言的特点包括高效性、跨平台性、易移植性、丰富的数据类型、灵活的语法等。
因此,C语言是一种非常灵活的语言,它能够用于各种不同类型的应用程序开发,包括操作系统、编译器、网络设备、数据库系统等等。
另外,C语言也是其他高级语言的基础,比如C++和JAVA都是在C语言的基础上开发出来的。
3.知识点总结(1)C语言的基本数据类型包括整型、浮点型、字符型和数组等。
整型有int、short、long等,浮点型有float、double等,字符型是以单引号表示的单个字符。
(2)C语言的控制语句包括循环语句和分支语句,循环语句有for、while、do-while等,分支语句有if-else和switch-case等。
(3)C语言的函数是程序的基本模块,它能够实现代码的重用和模块化。
函数由函数名、参数列表和函数体组成,其中参数列表和返回值可以是任意类型。
(4)C语言的指针是一种非常重要的概念,它能够直接操作内存中的地址,从而实现对内存的灵活控制,提高程序的效率。
(5)C语言的内存管理是由程序员手动管理的,包括内存的分配和释放等,这就需要程序员对内存有很深的理解和掌握。
(6)C语言的文件操作是实现数据持久化的手段,包括文件的打开、读写、关闭等。
通过对上述的知识点总结,读者可以对C语言有一个大致的了解,同时也能够为初学者提供一些帮助。
二、JAVA语言1.基本概念JAVA语言是一种面向对象的编程语言,它最早由美国的Sun公司开发,现在是由Oracle公司维护。
JAVA语言的设计目标是实现“一次编写,到处运行”,即可以在各种不同的硬件和操作系统上运行。
黑马程序员:3分钟带你读懂C/C++学习线路图随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者。
而在今天,它又扮演着什么样重要的角色呢?请往下看:后端服务器,移动互联网后端,经典Windows界面开发,移动互联网端界面开发,跨平台界面开发,图形分析,系统架构,应用设计,还有现在最为流行的分布架构等一些新的技到术领域。
这么牛的编程语言,你是不是想知道怎样学习和掌握它呢?接下来请看经过黑马程序员小编整理过C/C++工程师必备知识的思维导图。
初学者看到这么密集的知识点,是不是有点眼晕呢?的确,C/C++是一门知识面覆盖很广的编程语言。
想学好C/C++的你并不需要慌张,内容虽多,但依然有法可依。
只要有足够的耐心和毅力,加上正确的学习方法,就不怕你学不好C/C++。
既然如此,C/C++开发到底需要学些什么呢,又应该怎么学呢?接下来由黑马程序员C/C++学院教你如何从零基础学习C/C++开发,快速进入牛人之列,掌握这门编程语言。
一、初级入门阶段在入门之初,首先要做的是通过C/C++语言的学习培养编程思维和动手能力,深刻理解面向过程和面向对象的思想方法。
这个阶段你需要学习:①C语言数据类型、变量、内存布局、指针基础;字符串、一维数组、二维数组;一级指针,二级指针,三级指针,N级指针概念,指针数组和数组指针;结构体、文件的使用;动态库的封装和设计;函数指针回调函数。
②C++语言面向对象编程思想;类的封装,构造和析构、静态成员、对象管理;类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;对象动态管理、友元函数、友元类、操作符重载;C++编译器对象管理模型分析;类对象的动态管理(new/delete);友元函数和友元类;运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载);类的继承、多继承及其二义性、虚继承;多态(概念、意义、原理剖析、多态案例);虚函数、纯虚函数、抽象类(面向抽象类编程思想案例);函数模板、类模板,模板的继承;C++类型转换;C++输入输出流(标准I/O 文件I/O 字符流I/O);C++异常处理(异常机制、异常类型、异常变量、异常层次结构、标准异常库);③常见常用的IDE开发工具诸如Windows平台VC系列:VC++6.0(比较古老) ;Visual Studio2013, Visual Studio2015;Mac平台的XCode系列,还有CodeBlock,另附一些高级编辑器Notepad++, EditPlus,UE等一些开发工具的常用设置和一些常见快捷键的使用。
注明:以下及其后续内容部分摘自《Standard C++ Bible》,所有程序代码都在Visual Stdio 6.0中编译运行,操作系统为WinXP。
本文不涉及VC6.0开发工具的使用,只讲解C++语法知识。
C++和C的共同部分就不讲解了(如常量和变量,循环语句和循环控制,数组和指针等,这里面的一些区别会在本节和下节介绍一下),具体可看精华区->新手上路->C 语言入门,本文着重介绍C++的特点,如类、继承和多重继承、运算符重载、类模板、C++标准库、模板库、等等。
一、C++概述(一) 发展历史1980年,Bjarne Stroustrup博士开始着手创建一种模拟语言,能够具有面向对象的程序设计特色。
在当时,面向对象编程还是一个比较新的理念,Stroustrup博士并不是从头开始设计新语言,而是在C语言的基础上进行创建。
这就是C++语言。
1985年,C++开始在外面慢慢流行。
经过多年的发展,C++已经有了多个版本。
为次,ANSI和ISO的联合委员会于1989年着手为C++制定标准。
1994年2月,该委员会出版了第一份非正式草案,1998年正式推出了C++的国际标准。
(二) C和C++C++是C的超集,也可以说C是C++的子集,因为C先出现。
按常理说,C++编译器能够编译任何C程序,但是C和C++还是有一些小差别。
例如C++增加了C不具有的关键字。
这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译这样的C程序。
C程序员可以省略函数原型,而C++不可以,一个不带参数的C函数原型必须把void 写出来。
而C++可以使用空参数列表。
C++中new和delete是对内存分配的运算符,取代了C中的malloc和free。
标准C++中的字符串类取代了C标准C函数库<cstring>头文件中的字符数组处理函数。
C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。
c语言设计知识点总结500字c语言设计知识点总结C语言是一门广泛使用的编程语言,被广泛应用于系统软件、嵌入式系统和游戏开发等领域。
掌握C语言设计的核心知识点对于成为一名优秀的程序员至关重要。
本文将对C语言设计中的重要知识点进行总结,帮助读者加深对C语言的理解。
一、数据类型在C语言中,数据类型是编程中的基础概念。
C语言提供了多种数据类型,包括整型、浮点型、字符型等。
了解各种数据类型的区别和使用方法是编写高效程序的关键。
1. 整型(int):用于表示整数值,分为有符号整型和无符号整型两种。
通过使用不同的整数类型,可以节省内存空间并提高效率。
2. 浮点型(float和double):用于表示小数值。
float 类型表示单精度浮点数,double类型表示双精度浮点数。
在进行浮点数运算时需注意精度损失的问题。
3. 字符型(char):用于表示单个字符。
字符常量用单引号括起来,字符变量用字符常量赋值。
二、运算符运算符是进行数学和逻辑运算的符号,掌握各种运算符的使用方法和优先级对于编写正确的计算表达式和逻辑判断十分重要。
1. 算术运算符:包括加、减、乘、除、取余、自增和自减等。
使用算术运算符进行数值操作。
2. 关系运算符:用于比较两个值的大小关系,返回的结果是布尔类型(true或false)。
3. 逻辑运算符:用于对布尔类型的值进行逻辑运算,包括与(&&)、或(||)、非(!)等。
三、控制语句控制语句是编程中用于控制程序流程和执行顺序的语句。
了解各种控制语句的使用方法可以编写出更加灵活和高效的程序。
1. 条件语句(if-else):根据条件判断来选择不同的执行路径。
2. 循环语句(for、while和do-while):在满足特定条件的情况下重复执行一段代码。
3. 跳转语句(break、continue和goto):用于跳转到程序的不同部分,改变程序的执行顺序。
四、函数函数是一段被命名的代码块,用于完成特定的任务。
计算机二级c语言知识《计算机二级C语言:痛并快乐着的编码之旅》在计算机的神秘世界里,C语言就像是一把万能钥匙,而计算机二级C语言考试则像是一扇厚重的大门,等着我们去开启。
拥有计算机二级C 语言证书仿佛就像在程序员或者计算机爱好者的世界里拿到了一张入场券。
不过啊,要得到这张入场券可不容易,那种感觉就像是戴着镣铐跳舞。
先说说C语言本身吧。
C语言的语法就像是一场严谨的军事操典,少一个分号就像是士兵走错了一步队形,那是绝对不行的。
就好比你在和计算机这个超级严谨的长官下指令,一点细节都不能错。
比如说定义一个变量,那简直就是给这个变量上户口,你得准确告诉计算机它姓甚名谁,是整型还是浮点型之类的。
循环语句就像是一场永无止境的接力赛。
for循环像是一场规定好圈数的跑步,你能清楚地知道起始、终止和每一圈要做些什么。
而while循环像是没有尽头的长征,只要某个条件满足就一直跑下去。
在这个过程中,如果你逻辑没有想清楚就进去了,那可就像是在迷宫里乱闯的小老鼠,转半天出不来。
函数就更有趣了,它像是一个个小车间,你把数据这个原材料送进去,然后经过一些加工,再拿到你想要的成品数据。
可别忘了函数的参数传递呀,那就是原材料准确入库的规则,错了可能就生产出废品了。
然后咱们聊聊计算机二级考试。
备考的时候就像背水一战般壮烈。
各种真题、模拟题就像一群小怪兽等你去打败。
那些题目常常会挖一些小陷阱等你跳进去。
例如指针那部分,这玩意就像魔术里的障眼法,看起来简单,一不留神就被它搞得晕头转向。
有时候明明感觉自己写的代码完美无缺,一运行,却是满屏的错误提示,那感觉就像辛辛苦苦做了一顿大餐,结果发现全是黑暗料理,你看着屏幕的样子就像自己犯了什么不可饶恕的错误一样目瞪口呆。
但是呢,每当你成功地调试出一段代码,能正确运行实现它的功能时,那种成就感就像是登上了山顶看到了超级壮丽的风景。
所有熬过的夜、掉过的头发似乎都值了。
计算机二级C语言知识虽然充满了挑战,但也正是这种挑战让我们在这个科技浪潮的时代里有了更多独特的收获,学会了和这个数字世界更加有效的交流方式。
C语言的那些事儿‟ 多维数组那回事儿
2011年2月10日 由 edsionte 留言 » 前面几篇“那回事儿”的文章更强调一维组和指针之间的关系,本文关注的是多维数组,即“数组的数组”。
多维数组 我们可以将多维数组抽象的看作是具有某种类型的一维数组。当“某种类型”为基本的数据类型时,多维数组就退化成普通的一维数组;当“某种类型”仍然为数组时,那么就形成了多维数组。也就是说任何一个多维数组都可以分解成几个一维数组。
下面通过示例程序来深入了解多维数组ma[2][3]的构成。
print? 01 #include < stdio.h > 02 03 intmain() 04 { 05 intma[2][3]; 06 int(*r)[2][3]; 07 int(*p)[3]; 08 int*t; 09 10 /*代码段1*/ 11 p = ma; 12 printf("sizeof(ma[0])=%d\n",sizeof(ma[0])); 13 printf("ma =%p\tp =%p\n",ma,p); 14 printf("p+1 =%p\n",p+1); 15 /*代码段2*/ 16 r = &ma; 17 printf("sizeof(ma)=%d\n",sizeof(ma)); 18 printf("&ma =%p\tr =%p\n",&ma,r); 19 printf("&ma+1 =%p\tr+1=%p\n",&ma+1,r+1); 20 /*代码段3*/ 21 t = ma[0]; 22 printf("sizeof(ma[0][0])=%d\n",sizeof(ma[0][0])); 23 printf("ma[0] =%p\tt =%p\n",ma[0],t); 24 printf("ma[0]+1 =%p\tt+1 =%p\n",ma[0]+1,t+1); 25 return0; 26 }
由多维数组ma最左维的长度2可知,ma数组包含两个元素ma[0]和ma[1]。数组名ma
在表达式中是数组ma首元素的首地址。在代码段1中将ma赋值给数组指针p,则p指向多维数组ma的首元素ma[0],则p+1指向第二个元素ma[1]。其中p是一个数组指针,它指向一个长度为3的数组,则指针p每次移动的偏移量为12。可参考下图:
在代码2中对ma取地址并将其赋值给指针r。r现在指向一个“第一维的大小为2,第二维的大小为3的数组”,则r+1将指向下一个这样的数组(尽管这样的数组并不存在)。由此也可得知r每次的偏移量为24。
ma[0]和ma[1]都是一个长度为3的整型数组,现在以ma[0]为例进行说明。ma[0]中包含三个元素ma[0][0],ma[0][1]和ma[0][2]。在代码段3中将ma[0]赋值给t,则t指向数组ma[0]的第一个元素a[0][0],则t+1和t+2则依次指向第二个元素和第三个元素。 对多维数组ma的结构有了一定了解后,现在再看上述程序的运行结果: print? 01 edsionte@edsionte-laptop:~/code/expertC$ gcc array.c -o array 02 edsionte@edsionte-laptop:~/code/expertC$ ./array 03 sizeof(ma[0])=12 04 ma =0xbfdfaa6c p=0xbfdfaa6c 05 p+1 =0xbfdfaa78 06 sizeof(ma)=24 07 &ma =0xbfdfaa6c r=0xbfdfaa6c 08 r+1 =0xbfdfaa84 09 sizeof(ma[0][0])=4 10 ma[0]=0xbfdfaa6c t=0xbfdfaa6c 11 t+1 =0xbfdfaa70
注意在结果中,p,r和t的值均相同,但是所指向的数据却不同。更具体的说,这三个指针每次移动时的偏移量不同。
多维数组的初始化 数组的初始化只能在对数组进行声明(具体为定义型声明)时进行。一维数组的初始化很简单,只要将所有初始值放在一个大括号中即可。如果声明数组时未指定数组的长度,则编译器会根据初始值的个数来确定数组的长度。
print? 01 #include < stdio.h > 02 03 intmain() 04 { 05 intm[] = {1,2,3}; 06 intn[] = {1,2,3,}; 07 08 printf("length(m)=%d\n",sizeof(m)/sizeof(m[0])); 09 printf("length(n)=%d\n",sizeof(n)/sizeof(n[0])); 10 return0; 11 } 12 13 /* 编译并运行 */ 14 edsionte@edsionte-laptop:~/code/expertC$ gcc init_array.c -o init_array 15 edsionte@edsionte-laptop:~/code/expertC$ ./init_array 16 length(m)=3 17 length(n)=3 注意,在最后一个初始值后面可以继续加一个逗号也可以省略,这并不影响数组的长度。
对于多维数组而言,通常使用嵌套的大括号进行多维数组的初始化。由于多维的数组其实是有若干个一维数组构成的,则每个大括号都代表一个一维数组。对于多维数组而言只能省略最左边 下标的长度。
print? 01 #include < stdio.h > 02 03 intmain() 04 { 05 intb[][3] = {1,2,1,1}; 06 intc[][3] = {{1,2,1},{1,2,3},}; 07 08 printf("length(b)=%d\n",sizeof(b)/sizeof(b[0])); 09 printf("length(c)=%d\n",sizeof(c)/sizeof(c[0])); 10 return0; 11 } 12 13 /* 编译并运行 */ 14 edsionte@edsionte-laptop:~/code/expertC$ gcc init_array.c -o init_array 15 edsionte@edsionte-laptop:~/code/expertC$ ./init_array 16 length(b)=2 17 length(c)=2 可以看到,不使用大括号也可以对多维数组进行初始化,只不过代码可读性较差。
它总是迷惑你! 一旦涉及到多维数组,总有些让你迷惑的地方。比如:
print? 1 charma[2][3][2]={ 2 {{1,2},{2,3},{3,4}},
3 {{3,5},{4,5},{3,3}} 4 }; 5 6 sizeof(ma[0,1,1])=?
对于上面的代码,我们最后的迷惑点都可能落在ma[0,1,1]上。难道多维数组可以这样使用
吗?如果ma[0,1,1]和ma[0][1][1]等价,那么sizeof(ma[0,1,1])的值就是1。很可惜这样的猜测是不正确的,正确答案为6。再比如下面的代码: print? 1 charma[3][2] = {
2 (1,2),(3,4),(5,3) 3 }; 4 5 ma[0][0]=?
上述代码是为数组ma进行初始化,那么ma[0][0]的值是多少?恐怕很多人都会认为是1。
不过正确答案是2。 这两个问题都涉及到了逗号表达式。如果你对逗号表达式有基本的了解,那么也就没有上述那种莫名其妙的迷惑了。根据逗号表达式的运算,对于举例1中的ma[0,1,1]实际上等价于ma[1];对于举例2中的初始化其实等价为char ma[3][2] = {2,4,3}。 参考: 《C专家编程》 人民邮电出版社;(美)林登(LinDen.P.V.D) 著,徐波 译; 指针和数组的可交换性 2011年2月7日 指针和数组是不相同的,但“很多时候”我们总认为指针和数组等价的。不可否认,这两者在某种情况下是可以相互替换的,但并不能就因此而认为在所有情况下都适合。《指针和数组不是一回事儿》系列文章将逐步深入分析指针和数组的不同之处,并解释什么时候指数组等价于指针。本文属于《指针和数组不是一回事儿》系列文章之三。
虽然前面两篇文章已经说明了数组和指针的不同,但不可否认的是,指针和数组某些可相互交换的用法仍然令人混淆。本文将给出指针和数组可交换的情景,并且分析可交换的原因。
“指针和数组可以交换!” 说出这句话并不是毫无根据的,因为在下面的两个举例中使用数组形式和指针形式都可以达到相同的结果。
举例1: print? 01 #include < stdio.h > 02 03 intmain() 04 { 05 char*p ="edsionte"; 06 charstr[] ="edsionte"; 07 08 printf("p[1]=%c *(p+1)=%c\n",p[1],*(p+1)); 09 printf("str[1]=%c *(str+1)=%c\n",str[1],*(str+1)); 10 11 return0; 12 } 13 14 /* 编译并运行程序 */ 15 edsionte@edsionte-laptop:~/code/expertC$ gcc tmp.c -o tmp 16 edsionte@edsionte-laptop:~/code/expertC$ ./tmp 17 p[1]=d *(p+1)=d 18 str[1]=d *(str+1)=d
在举例1中,指针p指向一个匿名的字符串“edsionte”,这个匿名字符串的占用的内存空间
为9个字节;与p指向一个匿名字符串不同,数组str内存储着字符串“edsionte”,占用了9个字节的空间。
现在分别要访问‟d',则方法如下。对于指针p,分别可以通过指针形式*(p+1)和数组形式p[1]来访问其所指的数据;对于数组str,分别可以通过指针形式*(str+1)和数组形式str[1]来访问数组内的元素。 我们已经知道指针和数组在内存构造和访问方式上都不同,但为什么它们都分别可以通过指针的方式和数组的方式进行访问?
举例2:
print? 01 #include < stdio.h > 02
03 voidgetStr_pointer(char*str) 04 { 05 printf("%s\n",str); 06 printf("getStr_pointer(): sizeof(str)=%d\n",sizeof(str));