2009-09-23 1、sizeof会计算实际内存空间,strlen会计算C风格的字符串的实际字符数(不包括\0)。 2、以字符串形式出现的,编译器都会自动添加\0。...3、char a6 = "Hello";这是不敌的,因为后者是一个常量。 4、char a[] = "Hello";是正确的,因为a相当于一个指针。...5、char a[] = "Hello";等价于char a[] = {"Hello"}; 6、char *s = "Hello";这个也带有\0。 7、c++中的c风格字符串时带有\0的字符数组。
初识C++:从基础开始 在接触C++之前,我对编程的了解仅限于一些基础的概念,例如变量、循环和条件语句。C++的学习从这些最基本的部分开始,帮助我夯实了编程的基础。...指针是C++的一大特色,同时也是许多初学者的难点。我在学习过程中经常因为指针的误用导致程序崩溃,甚至遇到一些难以调试的问题。 为了更好地理解指针,我专门阅读了一些资料,并亲手编写了许多练习程序。...例如,我通过编写动态数组、链表和二叉树等数据结构,深刻体会到了指针在动态内存分配中的重要性。...例如,在一次编程竞赛中,我需要快速实现一个排序功能,而STL中的sort函数帮助我节省了大量时间。与此同时,我还了解了STL背后的一些实现原理,例如迭代器的使用和时间复杂度的分析。...提升编程效率的技巧 随着对C++的深入学习,我也总结了一些提升编程效率的技巧: 模块化编程:将代码分成多个文件,使得每个模块专注于完成特定的任务,从而提高代码的可读性和可维护性。
数组的值一个个连续存在内存里,所以不像之前,一个变量里只存一个值(比如 j = 5),我们可以把多个值存在数组变量里,为了拿出数组中某个值,我们要指定一个下标(index)大多数编程语言里,数组下标都从...数组大小需要预先定好,链表大小可以动态增减,可以创建一个新节点,通过改变指针值,把新节点插入链表,链表也很容易重新排序,两端缩减,分割,倒序等。...我指队列,不是指那 23 个包裹,想象有个指针叫"邮局队列",指向链表第一个节点。...这种结构 可以用有多个指针的节点表示,因此没有,根,叶,子节点和父节点这些概念。可以随意指向。 以上概述了计算机科学中,最主要的一些数据结构这些基本结构之上,程序员做了各种新变体,有不同性质。...幸运的是,大多数编程语言自带了预先做好的数据结构,比如,C++有"标准模板库",Java有"Java 类库"。程序员不用浪费时间从零写,时间可以花在更有趣的事情。 下一节我们讲计算机理论贡献巨大的人。
文章目录 C++背景介绍:C++入门真的不难 C++语言与C语言的异同 类 类方法 C++ 类访问修饰符 类继承 构造/析构函数 拷贝构造函数 this指针 C++ 动态内存 数组的动态内存分配...和C经常被放在一起写,这难道还需要我再解释什么吗?...---- C++语言与C语言的异同 技术点 异/同 环境搭建 同 编码规范 略异 基本数据类型 同 标准输入输出 异 运算符 同 字符串 略异 分支循环 同 函数 同 类/结构体 异 指针/引用 同 分文件编程...strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。....h文件中,而类方法的实现放在.cpp文件中,这时候就需要下面的写法了。
在C/C++中定义数组,是一个定长的数据结构,最常用的定义如下 int arr[100]; 上述代码的中arr数组的长度已知,我们把上面的语句称之为声明语句,因为在编译期数组的长度已经确定了,我暂且发明了一个词来称呼这类数组...在日常编程中,有时需要在结构体中存放一个长度是动态的字符串(也可能是其他数据类型),一般的做法,实在结构体中定义一个指针成员,这个指针成员指向该字符串所在的动态内存空间。...千呼万唤始出来 我们来回顾一下,柔性数组用来在结构体中存放一个长度动态的字符串。...其实不用柔性数组我们一样可以做到:在结构体中定义一个方法,在方法中动态地将指针指向动态数组 #include #include #include struct...我们看到,上面的代码的确是可以完成我们想要的结果。我们看了一下指针p和数组的起始地址。我们可以看到动态数组的内存块和字符串的内存是两块不一样的内存。
指针是 C 语言公认的难点,要不然也不会有那么多 C 语言的书籍专门将“指针”放在标题中进行强调了: 《C 和指针(Pointers on C)》 《征服 C 指针》 《深入理解 C 指针(Understanding...本文的主要内容来自《征服 C 指针》和《C 专家编程》,这不是两本通常意义的 C 语言入门书,没有罗列式的讲解 C 的语法,而是能将知识点融会贯通,带有作者鲜明的个人风格,体现出他们丰富的实践经验。...因此,我们要攻克 C 语言的指针,只了解指针的基本概念是完全不够的,必须彻底搞懂 C 语言的声明,以及指针和数组的关系。下面我就分别进行介绍。...字符串字面量的类型实际上是“char 数组”,因此在表达式中,它会被解读为指向 char 类型的指针。...多维数组是一个真正的、在内存中连续存储的矩阵式结构,而数组的数组本质上是多个一维数组的嵌套。 在某些编程语言中(例如 C#),两者之间有着严格的区分。
C语言字符串的引用方式 在C语言程序中,字符串是存放在字符数组中的。 用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明%s输出该字符串。...C语言字符指针作函数参数 如果想把一个字符串从一个函数“传递”到另一函数,可以用地址传递的方法,即用字符数组名作参数,也可以用字符指针变量作参数。...C语言使用字符指针变量和字符数组的比较 字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),绝不是将字符串放到字符指针变量中。...字符数组中各元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容时不可以被取代的。 引用数组元素。对字符数组可以用下标法引用一个数组元素,也可以用地址法。...xiaolin";//将字符串放在字符数组中 char *pstr = str; for(int i=0; i<strlen(str); i++) { printf
注释 Go语言有两种注释方式,基本来自于我们熟悉的C或Java中的注释方式 // 单行注释 /* * 多行注释 */ 变量 Go与以往的C系列编程语言(Java、C#、C++等)最大的一个不同...就我个人感觉,我认为Go语言的语法是一个大杂烩,主要在C语言的基础上,吸收融合了Python、Java的某些语法特点,并做了一些创新,当然,也能看到一点JavaScript的影子。...实际上,Go所谓的切片,就是一个动态数组,类似与Java、Python中的List,可以自动增长。...数组切片的数据结构抽象为以下3个变量 一个指向原生数组的指针 数组切片中的元素个数 数组切片已分配的存储空间 实际上看过我的 C语言专栏 的朋友,应该非常熟悉了,这不就是 数据结构 那一篇的基于数组的线性表实现吗...在Go语言中,函数也是一种类型,函数也可以作为一种参数进行传递,从一个函数传入另一个函数,如同C语言中的函数指针或其他语言的函数式编程。
图片较大,文章中有拆解,需要原图可以留言找我要哈 1、基础语法学习 算法是以编程语言为基础的,所以选择一门编程语言来学习是必须的。 因为作者本身是C/C++技术栈的,所以就拿C语言来举例子吧。...介于篇幅,我会把C语言基础的内容,放在这个专栏 《光天化日学C语言》 里面去讲,一天更新一篇,对啊,既然说了要坚持,要养成习惯,我当然也要做到啦~如果你学到了哪一章,可以在评论区评论 “打卡” ,也算是一种全网见证嘛...而这里的题库,是我花了大量时间,搜罗了网上各大C语言教程里的例题,总结出来的思维导图,可以先大致看一眼: 从数学基础、输入输出、数据类型、循环、数组、指针、函数、位运算、结构体、排序 等几个方面,总结出的具有概括性的例题...4、正确解法4:奇淫技巧 当然,由于这个题目问的是交换变量后的输出,所以它是没办法知道我程序中是否真的进行了交换,所以可以干一些神奇的事情。...这个系列主要分为以下几个大块内容: 1)图论 2)动态规划 3)计算几何 4)数论 5)字符串匹配 6)高级数据结构(课本上学不到的) 7)杂项算法 先来看下思维导图,然后我大致讲一下每一类算法各自的特点
理解strcpy和strcat所代表的含义即可解决此题: strcpy(p,q):将q字符串中的内容拷贝到p所在的空间中,最后返回p(p的空间大小一定要能够存的下q中的字符总数,否则会崩溃) strcat...A C++程序中的main()函数必须放在程序的开始部分 B C++程序的入口函数是main函数 C 在C++程序中,要调用的函数必须在main()函数中 A选项是没有要求的;main函数是入口函数...) A pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针; B pa是一个指向数组的指针,所指向的数组是5个int类型的元素; C pa[5]表示某个数的第5个元素的值; D pa...是一个指向某个数组中第5个元素的指针,该元素是int类型的变量 pa是一个指针数组,每个元素都是int*类型的指针,A是对的,选A 下面两个结构体 在#pragma pack(4)和#pragma pack...,选C ---- 编程题 连续最大和 动态规划: 状态方程式: max( dp[ i ] ) = getMax( max( dp[ i -1 ] ) + arr[ i ] ,arr[ i ] ) dp
01字符串的引用方式 1、在C程序中,字符串是存放在字符数组中的。 2、用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明%s输出该字符串。...02 字符指针作函数参数 1、如果想把一个字符串从一个函数“传递”到另一函数,可以用地址传递的方法,即用字符数组名作参数,也可以用字符指针变量作参数。...03 使用字符指针变量和字符数组的比较 1、字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),绝不是将字符串放到字符指针变量中。 2、赋值方式。...5、指针变量的值是可以改变的,而数组名代表一个固定的值(数组首元素地址),不能改变。 6、字符数组中各元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容时不可以被取代的。 7、引用数组元素。...对字符数组可以用下标法引用一个数组元素,也可以用地址法。 8、用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。
看这份笔记需要有c++和c语言的基础,有一些很基础的不会解释。...在c语言中,数据和函数是分开的,构造出的都是一个变量,函数通过变量进行操作,而在c++中,生成的是对象,数据和函数都包在对象中,数据和函数都是对象的成员,这是说得通,一个对象所具有的属性和数据应该放在一块...C++类的两个经典分类 一个是没有指针的类,比如将要写的complex类,只有实部和虚部,另一个就是带有指针的类,比如将要写的另一个类string,数据内部只有一个指针,采用动态分配内存,该指针就指向动态分配的内存...由于使用者可能有多种复数的加法,所以要设计不同的函数满足使用者的要求,由于带有其他类型的参数,所以没有放入complex类中,放在外面定义,这里的有一个非常有趣的使用,返回的直接是complex( xx...由于字符串不像复数那样固定大小,而是可大可小,所以在实现string类的时候,私有数据是一个指针,指向动态分配的char数组,这样就可以实现类似动态字符串大小。
静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。 动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。...想学好C语言,很关键就是搞懂内存、指针、还有各种编译链接, 1、内存本质 编程的本质其实就是操控数据,数据存放在内存中。...因此,如果能更好地理解内存的模型,以及 C 如何管理内存,就能对程序的工作原理洞若观火,从而使编程能力更上一层楼。 大家真的别认为这是空话,我大一整年都不敢用 C 写上千行的程序也很抗拒写 C。...记住上面这两张图,这就是编程语言中所有变量的在内存中的样子,不管是 int、char、指针、数组、结构体、对象… 都是这样放在内存的。 2、指针是什么啥? 变量放在哪?...这如果完全靠我们编程人员去人脑记忆了,会引入复杂性,并且无法通过编译器检测一些语法错误。 而通过int * 去定义一个指针变量,会非常明确:这就是另外一个 int 型变量的地址。
我学习的第一门编程语言是Java,所以之前一直没有系统学习过C语言。这篇文章主要就是我学习过程的一个总结,方便以后复习查看。 一....C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对于带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。...char *str = “I love C!” 定义了一个指针变量str , 只能存放字符地址编号,I love C! 这个字符串中的字符不是都存放在str指针变量中。...(1)存放在数组中的字符串的内容是可修改的(注:数组没有用const修饰) char str[100]=”I love C!”...动态内存申请 1. 动态分配内存的概述 如果数组的长度是预先定义好的,在整个程序中固定不变,但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定 。
字符串,数组,结构体,宏,枚举,Switch,Static,const,Sizeof,指针,动态分配内存,函数,变量,声明等这些东西不能存在似懂非懂的模糊概念,要完全了然于胸。...陷入无尽的痛苦中,这是你就需要解决先有鸡还是先有蛋的问题。...一些简单的例子体现不出来她的强大功能,就如add(a, b) 之类的函数功能就是两个数相加,但是你要做一个带有括号优先级的加减乘除运算就有点意思了。...你会收到意想不到的结果。 如果你说没有,那你一头雾水我觉得是理所当然。对于学习编程语言,都是抽象的东西,不实践。纸上谈兵有何用?虽然大家都说编程思想最重要,光空谈又有啥用?...推荐一些学习资料有用请收之,无用请点评 初级: 《C程序设计语言》 《C Primer Plus》 《C和指针》 《Think in C》 进阶: 《C陷阱与缺陷》Andrew Koenig 著 《C专家编程
高级篇 内存管理 内存四区 内存分配 动态内存管理 指针高级 二维数组 二级指针 函数指针 函数指针的声明 函数指针的赋值与使用 函数指针的传递 void*指针 高级篇 内存管理 C语言程序加载到内存中...不断有新会员注册,那么我们的数组长度也需要增长。 动态内存管理 在C语言内存分配的三种形式中,真正能由程序员来控制管理的只有在堆上面分配的动态内存,这也是我们需要关注的重点内容。...在字符串的章节中讲过,C语言字符串也可以使用char*来表示,那么字符串数组也就可以使用二级指针char **来表示了。...既然存放在内存中,那么就会有地址。我们知道数组变量实际上也是一个指针,指向数组的起始地址,结构体指针也是指向第一个成员变量的起始地址,而函数指针亦是指向函数的起始地址。...接触过Java等具有泛型的面向对象编程语言的人,可能马上就会联想到泛型,是的,C语言没有泛型,但是利用void*指针的特点,我们可以使用一些技巧来模拟泛型编程。
01 字符串的引用方式 1、在C程序中,字符串是存放在字符数组中的。 2、用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明%s输出该字符串。...02 字符指针作函数参数 1、如果想把一个字符串从一个函数“传递”到另一函数,可以用地址传递的方法,即用字符数组名作参数,也可以用字符指针变量作参数。...03 使用字符指针变量和字符数组的比较 1、字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),绝不是将字符串放到字符指针变量中。 2、赋值方式。...编译时为字符数组分配若干个存储单元,以存放各元素的值,而对字符指针变量,只分配一个存储单元(Visual C++为指针变量分配4个字节)。...5、指针变量的值是可以改变的,而数组名代表一个固定的值(数组首元素地址),不能改变。 6、字符数组中各元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容时不可以被取代的。 7、引用数组元素。
首先申明下,看完这篇文章的一些做法,你可能会觉得很傻x,但是我仅仅是抱着一种尝试和学习的态度,实际中可能也并不会这么去用。...这被称为运行时绑定,在一些动态语言中,鸭子类型(duck typing) 常用来实现这种“多态”— 不关心是什么东西,只要觉得它可以run,就给他写个叫 run的函数即可。...也可以考虑使用普通类(plain class)(也就是常说的 C With Class)、泛型编程和独立的函数(就像数学、C,以及 Fortran 中那样)作为解决问题的方案。 当然,OOP !...(PS: char[0] 数组是一种 C 语言中常用技巧,通常放在结构体的最后,常用来构成缓冲区。...这部分我就放在第二篇写了,可以自己先去试下,达到大概这种效果: ?
就算你不是拿此书入门的,也可以放在手头当作参考书来用。 C和指针 可以说,选择了C语言就选择了指针,C语言和其它语言不同的一点就是,C语言避不开指针。...这本书的确详细讲了高阶指针的复杂逻辑,解释了指针与数组和字符串的关系,但它又不是一本仅仅讲指针的书。...完美C++ 传说中的Absolute C++,其翻译从第二版直接跨越到了第五版。我记忆尤其深刻的一句话就是,“掌握了变量的使用,就入门了编程”。...书中还给出了两个综合的示例,一个是使用词法分析编写一个解析表达式的计算器;另外一个是使用面向对象思想如何构造一个复杂的GUI程序。有趣的是,这本书毫无提及到指针,说明了指针在C++中其实不是必要的。...但是总是把对象放在栈上也不方便,现在智能指针出来之后,我们完全可以绕过原生指针了。 参考 C++标准库 此书第一版是2003年出版的,对应C++03,为了迎接C++11,13年来首次再版。
C编译器不曾实现的一些功能必须通过其他途径实现----标准I/O库和C预处理器。 在宏扩展中,空格会对扩展的结果造成很大的影响。宏后面不可加';',它不是C语句。...2.所有动态链接到某个特定函数库的可执行文件在运行时共享该函数库在内存中的一个单独拷贝。 只使用动态链接。...----但数组到指针的提升仍会发生 不需要按回车键就能得到一个字符,单字符I/O----用于游戏编程,这个我就不看了 有限自动机(FSM)可以用作程序的控制结构。...我觉得编译器可以打开一个选项,是否检查数组越界访问。 把作为形参的数组和指针等同起来是出于效率原因的考虑。在C语言中,所有非数组形式数据实参均以传值形式。...内存中数组的布局 C语言中,最右边的下标最先变化,这个约定被称为"行主序"。 只有字符串常量才可以初始化指针数组,因为可执行文件中字符串常量是作为数据存储。而161这样的字面常量只出现在代码中。
领取专属 10元无门槛券
手把手带您无忧上云