首页 > 编程语言 > 详细

C++之小试牛刀

时间:2020-09-10 19:48:34      阅读:104      评论:0      收藏:0      [点我收藏+]

C到C++的升级

1.变量的定义

C++中所有的变量都可以在使用的时候再定义

C中的变量都必须在作用域开始的位置定义

2.register关键字

C++为了兼容C,所以也支持register关键字,但是在C++的实际编译过程中已经忽略了register关键字,所以得出了与C中的一点不同:在C中对于register修饰的变量不可以取地址,而在C++中对于使用register修饰的变量却是可以取地址操作的

3.定义多个同名的全局变量

在C语言中,重复定义多个同名的全局变量是合法的,会把所有的连接到同一个地址

在C++中,不允许定义多个同名的全局变量

技术分享图片
 1 #include <stdio.h>
 2 
 3 int g_v;
 4 
 5 //int g_v;//C++中不可以定义同名的全局变量
 6 
 7 int main(void)
 8 {
 9   printf("Begin...\n");
10   int c = 0;
11   for(int i = 1;i<=3;i++)
12   {
13     for(int j = 1;j<=3;j++)
14     {
15       c += i * j;
16     }
17    }
18    printf("c=%d\n",c);
19    register int a = 0;
20    printf("&a = %p\n",&a);
21    printf("End..\n");
22    return 0;
23 }
C++中不可定义同名的全局变量和register的验证

4.struct关键字

C语言中的struct定义了一组变量的集合

C语言中的struct定义的标识符并不是一种新的类型

C++中的struct用于定义一种全新的类型

5.标识符

C++中所有的标识符都必须显示的声明类型,在C中的默认类型在C++中是不合法的

技术分享图片

技术分享图片
 1 #include <stdio.h>
 2 
 3 struct Student
 4 {
 5     const char* name;
 6     int age;
 7 };
 8 
 9 f(i)//error,没有指定返回的类型,以及参数的类型
10 {
11     printf("i = %d\n", i);
12 }
13 
14 g()//error,没有指定返回的类型,以及参数的类型
15 {
16     return 5;
17 }
18 
19 
20 int main(int argc, char *argv[])
21 {
22     Student s1 = {"Delphi", 30};
23     Student s2 = {"Tang", 30};
24     
25     f(10);
26     
27     printf("g() = %d\n", g(1,2,3,4,5));
28     
29     return 0;
30 }
View Code

const关键字

C++在C的基础上对const进行了优化处理

在C++中碰见const声明时在符号表中放入常量,编译过程中若发现使用常量则直接以符号表中的值替换

编译过程中若发现以下情况则给对应的常量分配存储空间:

1.对const常量使用了extern

2.对const常量使用&操作符

注:C++编译器虽然会在上面的两种情况下为const常量分配空间,但是不会使用其存储空间中的值

技术分享图片

技术分享图片
 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5    const int c = 0;
 6    int *p = (int*)&c;
 7    printf("Begin...\n");
 8    *p = 5;
 9    printf("c=%d\n",c);//c的值为0
10    printf("End...\n");
11    return 0;
12 
13 }
C++中的const
技术分享图片
 1 #include <stdio.h>
 2 
 3 void f()
 4 {
 5     #define a 3//在预处理期间就完成了文本的替换,所以没有作用域的限制
 6     const int b = 4;
 7 }
 8 
 9 void g()
10 {
11     printf("a = %d\n", a);
12     //printf("b = %d\n", b);
13 }
14 
15 int main()
16 {
17     const int A = 1;
18     const int B = 2;
19     int array[A + B] = {0};//在C编译器中,因为const修饰的变量未只读变量,在运行中才可以知道数组的大小故会报错而在C++编译器中const修饰的变量是真正意义上的常量,A和B直接使用符号表中的变量替换
20     int i = 0;
21     
22     for(i=0; i<(A + B); i++)
23     {
24         printf("array[%d] = %d\n", i, array[i]);
25     }
26     printf("a = %d\n", a);
27     f();
28     g();
29     
30     return 0;
31 }
const与宏

布尔类型和引用

C++在C语言基本类型系统的基础上增加了bool(布尔)类型

C++中的bool可取的值只有true(非0)和false(0)这两个值,

C++编译器会把非0值转换为true,0值转换为false

理论上bool只占用一个字节

技术分享图片
 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     bool b = false;
 6     int a = b;
 7     
 8     printf("sizeof(b) = %d\n", sizeof(b));
 9     printf("b = %d, a = %d\n", b, a);
10     
11     b = 3;
12     a = b;
13     
14     printf("b = %d, a = %d\n", b, a);
15     
16     b = -5;
17     a = b;
18     
19     printf("b = %d, a = %d\n", b, a);
20     
21     a = 10;
22     b = a;
23     
24     printf("a = %d, b = %d\n", a, b);
25     
26     a = 0;
27     b = a;
28     
29     printf("a = %d, b = %d\n", a, b);
30     
31     return 0;
32 }
验证bool在程序中只有1和0两个值

三目运算符

C语言中的三目运算符返回的是变量值,故不可以作为左值使用

C++中的三目运算符可直接返回变量本身(返回的是变量的引用),故既可以作为左值又可以作为右值使用

注:三目运算符返回的值中如果有一个是常量值,则与C语言中的用法一样,返回的是变量的值

技术分享图片
 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     int a = 1;
 6     int b = 2;
 7     (a<b?a:b) = 3;
 8     printf("a = %d,b = %d\n",a,b);
 9     
10     return 0;
11 }
View Code

引用

1.引用可以看成是一个已经定义的变量的别名

2.语法:Type &name = var;

注:普通引用在定义时必须用同类型的变量进行初始化

技术分享图片
 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     int a = 4;
 6     int& b = a;
 7     
 8     b = 5;
 9     
10     printf("a = %d\n", a);
11     printf("b = %d\n", b);
12     printf("&a = %p\n", &a);
13     printf("&b = %p\n", &b);
14     
15     return 0;
16 }
引用的验证

 

C++之小试牛刀

原文:https://www.cnblogs.com/yekongdebeijixing/p/13647218.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!