CPP随笔---CPP和C的区别

为什么学习完C还需要继续学CPP

作为刚入门的初学者,清楚的明白C是面向过程,而CPP是面向对象的编程语言,之所以学习是因为要掌握学习面向对象的编程思路。在以后的学习的过程,这一点我会持续补充。
(ps:在之后学习的过程之中,学习新知识点,我都会以三个方面进行展开,第一:这个知识点是什么?,第二:这个知识点能解决什么问题?,第三:这个知识点怎么用?

命名空间

命名空间是什么呢,是为了了区分不同程序员设置的相同的变量或者其他类型,在我的理解中,类似于作用域,举个例子,类似于名字重名,你叫张三,他也叫张三,那该如何区分呢?即增加修饰限定的词,比如4班的张三,和5班的张三。设置这样的命名空间有什么意义呢,能解决的什么样的问题呢,答案就是在一个大型项目中,不止一个程序员进行工作,所以我们需要区分他们那些相同命名的变量,函数这些。命名空间的使用,有三种方法:
1.就是每一次的使用,都带上它的限定域,即每次都喊“4班的”张三
std::cout
这里的std就是一个命名空间,不过是官方提供的,::可以理解为去这个std班级的找一位“cout的同学” ,工程中建议这样使用
2.using 的使用,即随用随取,using std::cout,一种这种的方案
3.另外一种using的使用,即using namespace std ,将std所有的东西都加入进来,容易造成冲突。
命名空间的使用,可以嵌套使用,所有导致第一种在使用时候,会面临前缀越来越长的作用。

const关键字

const是什么,const也是起到修饰限定的作用,在我的理解中也是一种记忆方式,const离谁近,那么它就会修饰谁,例如指针常量或者是常量指针,例如指向常量的指针,const char *prt ,它就离char近,所以代表着指针指向的内容是不可以改变的,而char const * ptr 就是修饰指针的,也就是无法改变指针的指向。

操作堆空间

堆空间,在C语言阶段我们已经耳熟能详了,就不再赘述,之所以在这里探讨这个,是因为在C语言中操作堆空间和在CPP操作堆空间是不一样的。在C语言中,是用(void)malloc(size t)分配堆空间,有两点注意事项,第一就是它的返回值是void类型,所以在使用的时候要强转一些,第二,就是分配内存的大小是以其内部参数所决定。与之对应的就是free,释放其内存空间,最后再把其指针释放,防止内存泄漏。而在CPP中,分配堆空间的是以new,即int * ptr = new int,很显然与C语言的,不同之处在于,不需要在强转了,自然将空间转换为变量的类型,在分配数据时候,不再需要判断再使用sizeof(type)* N,而是直接进行分配int * ptr = new int [N],也是自然而然的进行相应空间的分配。

引用

引用完完全全的是属于CPP的语法,那么引用是什么呢?其实,引用就是其变量的别名,类似于一个指针指向一个变量的内存空间,从而进行共用,这样带来的结果就是,当引用的数据进行改变了,其原本的变量的数据也会改变。其结构是int & ref = int x,这里的&不是解引用而是引用的意思,所以区别他们也是很简单的,看前面有没有变量类型。重要的是,它引用绑定一个变量,就不能再改变了。所以它有什么用呢,其最主要的作用就是作为函数的参数,在C语言阶段,函数的参数传递方式,无非就是两种,第一就是值传递,值传递只是一个副本,没有办法改变其原本真正的内容,第二个就是,指针传递,指针传递其本质就是传递一个内存地址,我们在内存地址的修改,肯定是会使原本的内容修改的, 而到了CPP阶段,我们又多一种新的方式,就是引用传递void func(int & a, int & b),它也能造成其原本的内容进行修改,原因已经解释过了,不再赘述。所以,按照它的描述,不禁想到,其实引用也是一个指针,不过它是一个受限制的指针,对了,就是常量指针。即const 修饰其指针所指向的内容。

posted @ 2026-07-03 20:01  无秋33  阅读(6)  评论(0)    收藏  举报