现在有好多人都比较迷茫,学习C++是不是需要先学习C语言?
其实这个问题不难,就是直接了解两者的联系和区别就可以给出答案。下面我们来看看他俩到底有什么关系。
.从名字上看,两者似乎有很大关系
C++,这个词在中国的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“Cplusplus”,它是一种使用非常广泛的计算机编程语言。好像是在C的基础上加了又加好多东西而变成“C加加”的。
年,贝尔实验室的BjarneStroustrup在C语言基础上推出了C++。C++进一步扩充和完善了C语言,是一种面向对象的程序设计语言。
在计算机科学中,C++仍被称为C语言的上层结构。它最后得名于C语言中的“++”操作符(其对变量的值进行递增)。而且在共同的命名约定中,使用“+”以表示增强的程序。Stroustrup说:“这个名字象征着源自于C语言变化的自然演进”。
这样看来C语言和C++是有血缘关系的。
2.从实质上看C语言是C++语言的一个子集。
C++语言包含了C语言的全部词法和语法的内容,同时它增加了面向对象程序设计语言所必备的内容。C为面向过程的语言,C++为面向对象的语言。C++语言源程序中比C语言多一种数据类型-----类,也就是多一种变量-----对象。
每天来一个C语言经典小程序和C语言编写的小游戏,带注释和解析
一道题目,玩转C语言指针数组和指向指针的指针
请先看下面的代码:#includestdio.h#includestdlib.h
intmain(){
char*lines[5]={
"COSC/",
"Programming",
"Techniques",
"is",
"greatfun"
};
char*str=lines[];
char*str2=*(lines+3);
charc=*(*(lines+4)+6);
charc2=(*lines+5)[5];
charc3=*lines[0]+2;
printf("str=%s\n",str);
printf("str2=%s\n",str2);
printf("c=%c\n",c);
printf("c2=%c\n",c2);
printf("c3=%c\n",c3);
returnEXIT_SUCCESS;
}
运行结果:
str=Programming
str2=is
c=f
c2=2
c3=E
看下面的分析之前,请先了解指针数组和指向指针的指针的基本概念
为了更加直观,把上面的数组改成下面的形式:
#includestdio.h
#includestdlib.h
intmain(){
char*string0="COSC/";
char*string="Programming";
char*string2="Techniques";
char*string3="is";
char*string4="greatfun";
char*lines[5];
lines[0]=string0;
lines[]=string;
lines[2]=string2;
lines[3]=string3;
lines[4]=string4;
char*str=lines[];
char*str2=*(lines+3);
charc=*(*(lines+4)+6);
charc2=(*lines+5)[5];
charc3=*lines[0]+2;
printf("str=%s\n",str);
printf("str2=%s\n",str2);
printf("c=%c\n",c);
printf("c2=%c\n",c2);
printf("c3=%c\n",c3);
returnEXIT_SUCCESS;
}
这样,或许会清晰很多,char*lines[5];定义了一个指针数组,数组的每一个元素都是指向char类型的指针。最后5行,为数组的每一个元素赋值,都是直接赋给指针。
而lines,是一个指向指针的指针,它的类型为char**,所以*lines是一个指向字符的指针,**lines是一个具体的字符。这一点很重要,一定要明白。
指针是可以进行运算的,lines为lines[5]数组的首地址,即第0个元素的地址;lines+0,lines+,lines+2...分别是第0,,2...个元素的首地址,*(lines+0)或lines[0],*(lines+)或lines[],*(lines+2)或lines[2]...分别是字符串str0,str,str2...的首地址。所以:
*lines==*(lines+0)==lines[0]==str0
*(lines+)==lines[]==str
*(lines+2)==lines[2]==str2
...
注意:lines为指向指针的指针,所以*(lines+n)为指针,**(lines+n)才为具体的字符。
上面的题目中:
lines[]:它是一个指针,指向字符串string,即string的首地址。
*(lines+3):lines+3为lines[5]数组第3个元素的地址,*(lines+3)为第3个元素,它是一个指针,指向字符串string3。
*(*(lines+4)+6):*(lines+4)+6==lines[4]+6==string4+6,为字符串string4第6个字符的地址,即f的地址,*(*(lines+4)+6)就表示字符f。
(*lines+5)[5]:*lines+5为字符串string0第5个字符的地址,即2的地址,(*lines+5)[5]等价于*(*lines+5+5),表示第0个字符,即2。
*lines[0]+2:*lines[0]为字符串string0第0个字符的地址,即C的地址。字符与整数运算,首先转换为该字符对应的ASCII码值,然后再运算,所以*lines[0]+2=67+2=69。不过要求输出字符,所以还要转换成69所对应的字符,即E。
希望对大家能有所帮助,欢迎大家转发
学习群:
进入阅读原文进入学习
c/c++直播课-每晚2:00-22:00
更多教程,南昌白癜风医院治疗白癜风用什么药好