代码编织梦想

C++与C的关系

C++ = C 结构化编程 + 面向对象(OO)+ STL(模板)泛型编程
在这里插入图片描述

  • C++继承了所有的C特性
  • C++在C的基础上增加了很多新特性
  • C++设计的目标是运行效率与开发效率的统一

从C到C++的升级

1.更加强调语言的实用性

C++所有变量都可以在需要使用时在定义,C语言中的变量都必须在作用域开始的位置定义!!

int c = 0forint i=1; i<=3; i++{
	for(int j=1; j<=3; j++)
	{
		c += i*j;
	}
}

2.register关键字的变化

C语言中无法获取register变量的地址,C++中可以获得register变量的地址
C++编译器发现程序中需要取register变量的地址时,register对变量的生命变得无效

3.全局变量声明规则的变化

在C语言中,重复定义多个同名的全局变量是合法的,在C++中,不允许定义多个同名的全局变量
C语言中的多个同名的全局变量最终会被链接到全局数据区的同一地址空间上。

4.struct关键字的加强

C语言中的struct定义了一组变量的集合
C语言中struct定义的标志符并不是一种新的类型
C++中的struct用于定义一个全新的类型

	C																	C++
typedef struct _tag_student Student;                       			struct Student
struct _tag_student 												{
{												等价						const char* name;
    const char* name;														int age; 
    int age;														};
};

5.函数的返回值与参数类型默认类型

C++中所有的标志符都必须显示的声明类型

C语言中的默认类型在C++中是不合法的

  • 在C语言中:
    int f() 表示返回值为 int,接受任意参数的函数
    f(void) 表示返回值为 int 的无参函数
  • 在C++中:
    int f() 和 int f(void)具有相同的意义,表示返回值为int的无参函数

6.const的进化

C语言中的const:

  • const修饰的变量是只读的,本质还是变量
  • const修饰的局部变量在栈上分配空间
  • const修饰的全局变量只在只读存储区分配空间
  • const只在编译器有用,在运行期无用(const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边)

C语言中的const使得变量具有只读属性,const将具有全局生命周期的变量存储于只读存储区(const不能定义真正意义的常量!C语言真正意义的常量是枚举)

test.c
#include <stdio.h>

int main()
{
   const int c = 0;
   int *p = (int *)&c;
   
   printf("Begin...\n");
   
   *p = 5;
   
   printf("c= %d\n", c);
   printf("End...\n");
   return 0;
}
 test.cpp
#include <stdio.h>

int main()
{
	const int c = 0;
	int *p = (int *)&c;
	
	printf("Begin...\n");
	
	*p = 5;
	
	printf("c= %d\n", c);
	printf("End...\n");
	return 0;
}

分别用gcc和g++编译上述两个源代码,test.c的输出 c = 5, test.cpp的输出 c = 0。

  • C语言中的const变量
    C语言中const变量是只读变量,会分配存储空间(不能出现在赋值符号的左边)

  • C++中的const常量
    会将const修饰的常量放入符号表,再次调用时用符号表中的值替换变量,类似于宏定义。但是和宏不一样:
    1.const常量是由编译期处理的
    2.编译期对const常量进行类型检查和作用于检查
    3.宏定义是预处理器处理的,单纯的文本替换

  • 可能分配存储空间
    1.当const常量为全局,并且需要在其他文件中使用
    2.当使用&操作符对const常量取地址

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_34543927/article/details/111093886

算法思想-爱代码爱编程

备注:只是核心思想,在此基础上可以向外拓展出更多内容 1.元素逆置 /*设计思想:通过循环,将首尾元素对调,并返回新顺序表 **/ ElemType temp; int i; for (i = 0;i < L->length / 2;i++){//L为结构体,参考本专栏《结构体》中的定义 temp = L->data[(L

仓库管理系统C语言-爱代码爱编程

先创建两个文件,管理员信息.txt, 货物信息.txt #include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> #include<time.h> #include<conio.h> typ

C语言函数,第一篇:函数的初步认识 ----by xhxh-爱代码爱编程

函数形式: return_type function_name( param ) { body } 一个函数由四部分组成,返回值类型return_type、参数、主体部分、括号,返回值类型是函数最后返回的数据类型, 诸如int、float等,void 不用返回或者说void返回的是一个无类型的数据 示例1: 返回值为整形的函数: #include &l

C语言括号匹配不用栈思路(考虑左右匹配)-爱代码爱编程

问题描述 表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。 请写一个程序,判断给定表达式中的括号是否匹配,既左右括号顺序和数量都匹配。 输入说明 输入为一个表达式字符串,长度不超过50。 输出说明 对输入的表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。 !!!注意,这

C语言 互换最大最小值-爱代码爱编程

是新手写的代码。 发上来是希望以后能回看自己的进步过程,同时把这里当成一个电子笔记本,收集题目。 肯定会有很多不足之处,希望大家多多指出错误(促进共同进步鸭 互换最大最小值 利用函数Swap(),从键盘输入10个整数,用函数编程实现寻找最大值和最小值,并互换它们所在数组中的位置。 下标法(乱起的名字) #include <stdio.h>

文件排序-爱代码爱编程

文件排序 问题描述 操作系统中在查找文件时会按照某个规则对文件排序,例如下图为按照文件修改日期逆序排序(最后修改的排在最前面)。 但目前操作系统不支持同时按照多个字段进行排序。现在请你写一个程序能够同时按照修改日期和文件大小对文件进行排序,排序规则为: 日期优先,最后修改的排在前面当修改日期相同时,大的文件排在前面输入说明 第一行为一个数字n,n 表示

线性分类器 ccf-爱代码爱编程

分析,该题仅考虑了点与直线的关系,由数学知识可知,若直线表示成 ax+by+c=0, 点(x1,y1)带入原方程,其值若大于0,则点在直线上方,否则在直线下方。代码如下 #include <iostream> using namespace std; struct Point { int x; int y; ch

leetcode解题模板 —— 二分查找-爱代码爱编程

1.模板 vector<int>& nums int left = 0;//左边界 int right = nums.size()-1;//右边界 int mid = 0; while(left <= right) { mid = (le

PAT乙 1023 组个最小数 (20分)(C C++)-爱代码爱编程

【题目描述】 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。 现给定数字,请编写程序输出能够组成的最小的数。 【输入】 输入在一行中给出 10 个非负整数,顺序表示我们拥有数

稀疏向量 ccf-爱代码爱编程

此题有几个坑,首先,不能直接开10的9次方数组来做,其次中间变量的范围比long还要大,需要用到long long类型。 此处我使用的map,因为map可以同时存下标和数字,同时map自带find函数,可以同时比较两个map数组中,是否有相同的下标,然后将数字取出相乘求和。 #include <iostream> #include &

leetcode解题模板 ——双指针-爱代码爱编程

1.模板 /*(1)定义两个边界指针*/ int left = 0;//左边界 int right = num.size() - 1;//右边界 while(left<right){/*执行操作*/} /*(2)定义两个快慢指针*/ ListNode*s = head;//慢指针 ListNode*f = head->next;//快指针

《四海小记c++学习之路》第二阶段 核心-爱代码爱编程

第二阶段 核心 目的:介绍c++面向对象编程,为大型项目做铺垫 案例:职工管理系统 1 内存分区模型 c++程序在执行时,将内存大方向分为4个区域 代码区: 存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时