博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【POJ】第一章 C/C++语言概述
阅读量:6283 次
发布时间:2019-06-22

本文共 5622 字,大约阅读时间需要 18 分钟。

hot3.png

前情提要:如果不涉及面向对象的部分,那么C++语言和C语言的语法90%以上是一样的,只不过略有扩充,用起来更为方便而已。

查看gcc版本:

E:\Program Files\MinGW\bin>gcc -vReading specs from ./../lib/gcc/mingw32/3.4.5/specsConfigured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchronization --enable-libstdcxx-debugThread model: win32gcc version 3.4.5 (mingw vista special r3)

所有程序都在gcc 3.4.5下编译运行。

//1.1程序的基本框架//gcc warning:return type of “main” is not “int”#include "stdio.h"int main(){	printf("hello world\n");	return 0;}//1.3 C/C++语言的数据类型//说明数据类型之间的自动转换int main(){	int n1=1378;	short n2;	char c='a';	double d1=7.809;	double d2;	n2=c;//n2 becaming 97	printf("c=%c,n2=%d\n",c,n2);		c=n1;	//char型变量只有一个字节,int型为两个字节	//1387十六进制为562,char型的c只得到了62,变成十进制即为98	//故输出c=b	printf("c=%c,n1=%d\n",c,n1);	n1=d1;	//n1变为7	printf("n1=%d\n",n1);	d2 = n1;	printf("d2=%f\n",d2);	return 0;}//1.4常量#define MAPLENGTH 100#define MAPWIDTH 80int main(){	int mapSize;	mapSize=MAPLENGTH*MAPWIDTH;	printf("the map size is %d\n",mapSize);}//1.5 运算符和表达式//算术运算符之除法运算符int main(){	int a=10;	int b=3;	double d=a/b;	printf("%f\n",d);	d=5/2;	printf("%f\n",d);	d=5/2.0;	printf("%f\n",d);	d=(double)a/b;    printf("%f\n",d);	return 0;}//1.5 运算符和表达式//算术运算符之自增自减运算符int main(){	int n1,n2=5;	n2++;	++n2;	n1=n2++;	n1=++n2;	printf("n1=%d,n2=%d\n",n1,n2);}//1.5 运算符和表达式//位运算符之左移运算符int main(){	int n1=15;	short n2=15;	unsigned short n3=15;	unsigned char c=15;	n1<<=15;	n2<<=15;	n3<<=15;	c<<=6;	printf("n1=%x,n2=%d,n3=%d,c=%x,c<<4=%d",n1,n2,n3,c,c<<4);	return 0;}//1.5 运算符和表达式//位运算符之右移运算符#include "stdio.h"int main(){	int n1=15;	short n2=-15;	unsigned short n3=0xffe0;	unsigned char c=15;	n1=n1>>2;	n2>>=3;	n3>>=4;	c>>=3;	printf("n1=%x,n2=%d,n3=%x,c=%x",n1,n2,n3,c);	return 0;}//1.9 函数#include "stdio.h"int multiple(int x,int y); //函数声明int main(){	int a=0,b=0;	scanf("%d%d",&a,&b);	printf("%d\n",multiple(a,b));	return 0;}int multiple(int x,int y)	return x*y;}//1.12 数组//我擦,输入100个参数,有没有搞错啊#include "stdio.h"#define MAX_NUM 100int main(){	int i,j;	int an[MAX_NUM];	//下面输入100个整数	for(i=0;i

 

指针一般规律:若有定义T *p;不论T是什么类型,sizeof(T *)的值都是4.因为指针表示的是地址,而当前流行的cpu内存寻址范围一般都是4GB即2^32,所以一个地址正好用32位,即4个字节表示。

tip1,不同类型的指针,若不经过强制类型转换,是不能互相赋值的,

eg. pn=(int *)p;

tip2,两个类型为T的指针相减的意义:p1-p2=(地址p1-地址p2)/sizeof(T);

tip3,指针和整数相加的定义:n+p意为,地址p+nXsizeof(T);

//1.14 指针#include "stdio.h"int main(){	int *pn1,*pn2;	char *pc1,*pc2;	int n=4;	pn1=(int *)100;	pn2=(int *)200;	printf("%d\n",pn2-pn1);//输出25,因为(200-100)/sizeof(int)=100/4=25	pc1=(char *)pn1;//pc1地址为100	pc2=(char *)pn2;	printf("%d\n",pc1-pc2);//(100-200)/sizeof(char)=-100	printf("%d\n",(pn2+n)-pn1);	int *pn3=pn2+n;	printf("%d\n",pn3-pn1);	printf("%d",(pc2-10)-pc1);	return 0;}//1.14 指针//指针和数组#include "stdio.h"int main(){	int i,an[200];	int *p;	p=an;	*p=10;	*(p+1)=20;	p[0]=30;	p[4]=40;	for(i=0;i<10;i++)//循环赋值		*(p+i)=i;	p++;	printf("%d\n",p[0]);	p=an+6;	printf("%d\n",*p);	return 0;}//1.14 指针//bubble sort#include "stdio.h"void BubbleSort(int *pa,int nNum){	int i,j;//在for中定义i,j在gcc下会报错:loop initial declaration used outside c99 mode	for(i=nNum-1;i>0;i--){		for(j=0;j
pa[i]){ int temp=pa[j]; pa[j]=pa[i]; pa[i]=temp; } } }}#define NUM 5int main(){ int an[NUM]={5,4,8,2,1}; BubbleSort(an,NUM); int i; for(i=0;i

tip,void指针:主要用于内存复制,将内存中某一块内容复制到另一块去,标准库函数void *memcpy(void *dest,const void *src,unsigned int n);将地址src开始的n字节内容复制到地址dest,返回值是dest

eg. memcpy(a2,a1,10*sizeof(int));

//1.14 指针//1.14.8 函数指针定义形式:类型名(* 指针变量名)(参数类型1,参数类型2,···);#include "stdio.h"void PrintMin(int a,int b){	if(a

指针tip:1.14.9 指针和动态内存分配,1.14.10 误用无效指针

//1.15 结构体/* tip 结构体定义一定是以分号结束的,struct Student {	...};Student stu1,stu2;等价于:struct Student {...} stu1,stu2; */#include "stdio.h"#include "string.h"#include "stdlib.h"#define NUM 4struct Student{	unsigned ID;	char szName[20];	float fGPA;};Student MyClass[NUM]={	{1234,"Tom",3.78},	{1238,"Jack",3.25},	{1232,"Mary",4.00},	{1234,"Jone",2.78}};int CompareID(const void *elem1,const void *elem2){	Student *p1=(Student *) elem1;	Student *p2=(Student *) elem2;	return ps1.ID-ps2.ID;}int CompareName(const void *elem1,const void *elem2){	Student *p1=(Student *) elem1;	Student *p2=(Student *) elem2;	return strcmp(ps1.szName,ps2.szName);}int main(){	int i;	qsort(MyClass,NUM,sizeof(Student),CompareID);	for(i=0;i

P62的代码1.15结构体真是好奇怪,看不出为什么错。。。

Mark:小工具,在线程序编译器调试结果如下:

Line 19: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'MyClass'以下略

本地调错信息如下

---------- gcc编译并生成 ----------

sheldon.c:19: error: syntax error before "MyClass"

以下略

问题:明明定义了Student结构体,怎么又说“Student”未声明呢???

Answer:感谢@斯雷波 的关注和解答,以上代码修改两处后可在C++编译环境调试通过。

26、27行修改*p1 *p2为*ps1 *ps2【打错了】,28行修改点号为箭头;

31到33行做类似修改;

若不修改点号为箭头,codepad报错如下

In function 'int CompareName(const void*, const void*)':

Line 33: error: request for member 'szName' in 'ps1', which is of non-class type 'Student*'
compilation terminated due to -Wfatal-errors.

在设置为C++语言或者使用VC++6.0都可以调试通过,本地gcc始终对19行报错 error: syntax error before "MyClass";

Tip:28行的修改参考

在c++中I如果是对象,就可以通过"."来调用I中的成员变量。

如果I是指针的话,就不能通过"."来调用,而只能使用"->"来调用。
C语言中不存在对象的概念。
这种情况的出现是因为使用了结构,例如
struct CandyBar{
float weight;
int calorie;
};
在程序中
CandyBar snack={
2.3,
350
};
我们就可以用snack.weight来取得结构中的值。
这时是不能使用"->"来调用的,"->"符号指针指针来说的。
如下情况可以使用"->"
CandyBar* bird;
bird->weight=2.33;
此时bird为一个CandyBar结构的地址指针。所以可以使用"->",而此时就不能使用
"."来操作。因为"." "相当于"对象的成员调用。

转载于:https://my.oschina.net/SnifferApache/blog/287779

你可能感兴趣的文章
ubuntu 安装 eslint
查看>>
【转】围观 Joomla, Wordpress 和 Drupal
查看>>
用JS做关灯游戏(初级)
查看>>
vue.js学习 自定义过滤器使用(2)
查看>>
laravel资源
查看>>
各种排序讲解
查看>>
Sql Server 网络配置
查看>>
要在VR潮流中分一杯羹,首先要搞清楚方向再创业
查看>>
vscode setting.jsonxx
查看>>
网站版权日期的处理
查看>>
Maven之debug技巧
查看>>
server2008远程开端口的方法
查看>>
启用用户布局表格
查看>>
Delphi异形窗口之PNG
查看>>
mysql数据库优化(二)
查看>>
linux下部署.net 项目 参考网址
查看>>
采药 NOIP 2005 普及组
查看>>
自动化构建工具
查看>>
工作流模式每个工作流引擎都会支持多种方式的表单。目前大家讨论到的大概有三种。 动态表单 外置表单 普通表单...
查看>>
CDZSC_2015寒假新人(1)——基础 g
查看>>