可以跳过C语言直接学习C

                          可以跳过C语言直接学习C++?

现在有好多人都比较迷茫,学习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

更多教程,







































南昌白癜风医院
治疗白癜风用什么药好



转载请注明:http://www.nydjfy.com/bcxx/895.html