使用VC++调试程序课件_第1页
使用VC++调试程序课件_第2页
使用VC++调试程序课件_第3页
使用VC++调试程序课件_第4页
使用VC++调试程序课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用VC++调试程序使用VC++调试程序调试程序调试运行单步跟踪单步跳进跟踪观察自动变量观察其他变量停止调试调试程序调试运行1:打开jiecheng项目(双击jiecheng.dsw文件)2:build该项目,确定程序能够运行3:调试运行阶乘程序4:设置断点5:再次调试运行程序6:使用单步执行程序到结束1:打开jiecheng项目(双击jiecheng.dsw文1:打开jiecheng项目1:打开jiecheng项目2:Build该项目,确定程序能够运行2:Build该项目,确定程序能够运行3:调试运行阶乘程序Go3:调试运行阶乘程序Go4:设置断点将鼠标停留在程序的第8行,在第8行的任意地方单击鼠标左键(第8行即“i=i*4;”)在工具栏上选择按钮,为第8行设置断点,以便让程序在此处暂停运行4:设置断点将鼠标停留在程序的第8行,在第8行的任意地方单击5:再次调试运行阶乘程序注意观察,现在调试运行程序会如何?Go5:再次调试运行阶乘程序注意观察,现在调试运行程序会如何?G5:再次调试运行阶乘程序(续)程序暂停之处调试(Debug)工具:控制程序前进步伐查看程序当前状态5:再次调试运行阶乘程序(续)程序暂停之处调试(Debug)6:使用单步执行到程序结束设置断点以后,调试运行程序时,程序开始执行,同时运行到断点处暂停下来,如今我们有机会观察程序的运行情况,同时诊断程序目前的状态是否如我们所预期的那样。不过我们先不着急观察程序的状态,而是来看看如何控制程序的运行,以便在我们需要的时候让程序暂停下来,并且以我们需要的方式走走停停!6:使用单步执行到程序结束设置断点以后,调试运行程序时,程序6:使用单步执行到程序结束程序停下来了,如何让程序从暂停的地方接着向前执行?方法是使用单步执行手段(StepOver)让程序向前走一步停止调试停止调试并重新启动调试单步执行当前位置6:使用单步执行到程序结束程序停下来了,如何让程序从暂停的地熟悉调试工具栏和菜单(只在调试运行时出现)对比调试运行时出现的调试菜单“Debug”和调试工具栏,依照图标查找对应项熟悉调试工具栏和菜单(只在调试运行时出现)对比调试运行时出现观察自动变量自动变量观察自动变量自动变量观察变量的值及其随程序运行时的变化情况设置断点,调试运行程序,如今程序暂停在断点处等待选择Debug菜单,找到最后一项“QuickWatch”并点击观察变量的值及其随程序运行时的变化情况设置断点,调试运行程序输入想要观察的变量变量名变量的值点击AddWatch输入想要观察的变量变量名变量的值点击AddWatch点击Addwatch,看到如下画面点击Addwatch,看到如下画面调试观察每一步骤变量i的值点击单步执行按钮或者菜单,程序那么向前单独运行一个步骤每向前执行一步,就会暂停下来,如此我们就有充足的时间观察所关心的变量名称观察变量i的值的情况调试观察每一步骤变量i的值点击单步执行按钮或者菜单,程序那么注意在调试过程中断点不能设置在空白行上面添加断点和删除断点的方法一样一个程序中能够设置多个断点按下F5键可以让程序从当前位置向前执行,直到遇见下一个断点或者程序结束注意在调试过程中断点不能设置在空白行上面相关C语言基础知识指针:结构体:相关C语言基础知识指针:指针指针新建VisualC++程序【四】利用已有的程序编写新程序无论是控制台程序,或者是Windows窗口程序,VisualC++都会要求有对应的项目文件。而且在大多数情况下,C程序的差不多框架基本上一致的,例如:都有主函数等等。因此在编写一个新的程序时,能够利用往常编写过的程序,其操作方法有两种。(1)程序复用操作将已有的程序复用到新程序上的方法很简单,确实是将程序内容通过“复制―粘贴”实现。(2)项目复用操作打开已有的项目文件,将原来的文件删除,利用项目管理增加新程序文件或资源元素等。新建VisualC++程序【四】利用已有的程序编写新程序新建VisualC++程序【五】项目管理无论项目是否建立,只要开始程序的编译、链接、运行或调试过程,VisualC++就会按项目管理方式进行控制。例如:当使用文件新建方式建立一个源程序文件后,只要开始编译则VisualC++会自动提示创建项目。

新建VisualC++程序【五】项目管理新建VisualC++程序新建VisualC++程序地址和指针的概念【一】指针概述:1、“&”:地址运算符2.“*”:指针运算符,取其指向的内容:

exp:&a:变量a的地址:*p:变量p的内容;注:“&”不能施加在常数,常量和表达式上;地址和指针的概念【一】指针概述:【二】指针变量:

存放某种变量地址的变量称为指针变量。1035….ab20172018p2010q2012因此,在C语言中,将地址形象化地称为指针1035….ab20172018p2010q2012因此,在定义一个指针变量

指针变量的定义一般形式为:基类型*指针变量名;例如:

inti,j,*pi,*pj;floatx,y,*p1,*p2;指针变量的赋值:使得指针变量指向变量指针变量名=&变量名;如:pi=&i;pj=&j;p1=&y;p2=&x;注意:指针变量只能存放指针(地址),且只能是相同类型变量的地址。例如,指针变量pi、pj,只能接收int型、p1,p2只能接收float型的地址,否那么出错。定义一个指针变量指针变量的定义一般形式为:例如:结构体结构体指针变量的引用在程序中,能够用:*指针变量名代替其所指变量。如假设:

inti,*p;p=&i;则i=5;与*p=5;的作用相同,即可用*p代替i,这里*号称为指针运算符(或称为间接访问运算符)指针变量的引用在程序中,能够用:*指针变量名代替其所指指针变量作为函数参数实参:变量地址或已赋值的指针变量,形参:指针变量功能:地址传送方式,会将改变后的值带回。例10.3通过函数调用实现例10.2的功能。swap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}main(){inta,b,*pointer1,*pointer2;scanf("%d%d",&a,&b);pointer1=&a;pointer2=&b;if(a<b)swap(&a,&b);printf("\n%d,%d",a,b);}指针变量作为函数参数实参:变量地址或已赋值的指针变量,形参:数组与指针1.概念数组的指针──数组在内存中的起始地址,用数组名表示2.指向数组的指针变量---赋于数组名的指针变量例如,inta[10],*p=a(或*p=&a[0]);

或者:

inta[10],*p;p=a;数组与指针1.概念3.通过指针引用数组元素假如有“inta[10],*p=a;”,那么:(1)p+i==a+i==&a[i]。(2)*(p+i)==*(a+i)==a[i]。(3)p[i]==*(p+i)==a[i]。注意:p+1指向数组的下一个元素,而不是简单地使指针变量p的值+1。事实上际变化为p+1*size(size为一个元素占用的字节数)。例如,假设指针变量p的当前值为3000,则p+1为3000+1*2=3002,而不是30013.通过指针引用数组元素用数组名作为函数参数形参:数组或指针变量实参:数组名或指向数组的指针变量传递方式:地址传送方式作用:假设函数中对数组作了修改,那么调用函数中的数组也会作同样的修改用数组名作为函数参数指向函数的指针1.函数指针的概念

一个函数在编译时,被分配了一个入口地址,那个地址就称为该函数的指针。能够用一个指针变量指向一个函数,然后通过该指针变量调用此函数。

指向函数的指针2.指向函数的指针变量

(1)定义格式函数类型(*指针变量)();

注意:“*指针变量”外的括号不能缺,否那么成了返回指针值的函数。

例如,int(*fp)();/*fp为指向int函数的指针变量*/

使用VC++调试程序课件(2)赋值

函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。

指向函数的指针变量=[&]函数名; 注意:函数名后不能带括号和参数;函数名前的“&”符号是可选的。(2)赋值

函数名代表该函数的入口地址。因此,可用函数名(3)调用格式

(*函数指针变量)([实参表])3.指向函数的指针变量作函数参数指向函数的指针变量的常用用途之一,确实是将函数指针作参数,传递到其它函数。注意:对指向函数的指针变量,诸如p+i、p++/p--等运确实是没有意义的。例10.24

设有一个函数process,在调用它时,每次实现不同的功能。输入a和b两个数,第一次调用时找出a与b中的大者,第二次找出小者,第三次求和。(3)调用格式#include<stdio.h>voidmain(){intmax(int,int);intmin(int,int);intadd(int,int);intprocess(int,int,int(*fun)());inta,b;printf("enteraandb:");scanf("%d%d",&a,&b);printf("\nmax=");process(a,b,max);printf("\nmin=");process(a,b,min);printf("\nsum=");process(a,b,add);}#include<stdio.h>max(intx,inty){returnx>y?x:y;}min(intx,inty){returnx>y?y:x;}add(intx,inty){returnx+y;}process(intx,inty,int(*fun)(int,int))/*fun是一个指向函数的指针,该函数是一个有两个整型参数的返回整型值的函数*/{intresult;result=(*fun)(x,y);printf("%d\n",result);}max(intx,inty)返回指针值的函数一个函数能够返回一个int型、float型、char型的数据,也能够返回一个指针类型的数据。返回指针值的函数(简称指针函数)的定义格式如下:

函数类型*函数名(形参表列)

例如:

int*a(intx,inty);该函数的函数名为a,返回的是一个整型的指针。返回指针值的函数一个函数能够返回一个int型、float指针数组指针数组的概念

数组的每个元素基本上一个指针数据。指针数组比较适合用于指向多个字符串,使字符串处理更加方便、灵活。

数据类型*数组名[元素个数]

例如:int*p[4];char*string[10];指针数组指针数组的概念

数组的每个元素基本上一个指针数p指向数组a易混淆的问题*p++,*p(++),*(++p),(*p)设P指向a数组中的第i个元素:*(p--)==a[i--];*(--p)==a[--i];*(++p)==a[++i].p指向数组a易混淆的问题*p++,*p(++),*(++p)结构体结构体例:描述一个学生的姓名、学号、性别、年龄。每个学生都有如此的属性,它们构成一个描述学生具体情况的一个整体。而每个属性又是一个差不多的类型,本例中可分别用字符数组、长整型、字符型、和整型来描述。【一】结构体类型的定义结构体概念的引入数据的描述:差不多类型:整型、实型、字符型。数组:属于同一种类型的元素的集合。有时,需要用不同的数据类型来描述一个事物的各方面属性,故此,C语言引入了结构体的概念。例:【一】结构体类型的定义结构体概念的引入数据的描述:struct结构体类型名{类型标识符成员名1;类型标识符成员名2;

……

类型标识符成员名n;};结构体类型的定义如:structstudent{charname[10];longid;chargender;intage;}注意:structstudent应作为一个类型整体,name[10]、id、gender、age基本上其成员。

struct及花括号后的“;”不能省。struct结构体类型名结构体类型的定义如:注意:str定义结构体类型,描述以下数据

structstudent{intno;/*学号*/charname[10];/*姓名*/charsex;/*性别*/intage;/*年龄*/floatscore[10];/*成绩*/};结构体类型的举例(1)学生情况:包含学生的学号、姓名、性别、年龄、10门课程成绩:结构体类型能够嵌套定义即一个结构体类型中的某些成员又是其他结构体类型注意定义结构体类型,描述以下数据

struct例如,对已定义的结构体类型structstudent,能够定义结构体变量:

structstudentzhang,stu1;

【二】结构体变量结构体变量的定义1.先定义结构体类型,再定义结构体变量格式:struct结构体名结构体变量名表;三种方法:例如,对已定义的结构体类型structstudent,2.在定义结构体类型的同时定义变量例如:structstudent{charname[10];charsex;intage;floatscore;}stu1,stu2;格式:struct结构体类型名

{类型标识符成员名1;类型标识符成员名2;

……

类型标识符成员名n;

}变量名表;2.在定义结构体类型的同时定义变量例如:structs3.用匿名形式直截了当定义结构体类型变量(不出现结构体名)例如:struct{charname[10];charsex;intage;floatscore;}stu1,stu2;格式:struct{类型标示符成员名1;类型标示符成员名2;

……

类型标示符成员名n;

}变量名表;(1)类型与变量是不同的概念,不要混同。对结构体变量来说,在定义时一般先定义一个结构体类型,然后定义变量为该类型。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配存储空间的,只对变量分配存储空间。(2)对结构体中的成员,能够单独使用,它的作用相当于普通变量。(3)成员也能够是一个结构体变量。(4)成员名可与程序中的变量同名,两者不代表同一对象。结构体的说明3.用匿名形式直截了当定义结构体类型变量(不出现结构体名)例。定义结构体变量stu1:structstudentstu1;stu1.age=20;scanf("%f",&stu1.score);stu1.age表示引用结构体变量stu1中的age成员,因该成员的类型为int型,因此能够对它执行任何int型变量能够执行的运算。结构体变量的使用结构体变量一般不整体引用,而是引用其成员变量。成员变量引用格式结构体变量名.成员名其中的圆点运算符称为成员运算符,它的运算级别是最高的。例。定义结构体变量stu1:结构体变量的使用结构体变量一般(1)结构体类型变量的各成员(分量)必须单独引用,成员运算符“•”具有最高优先级。(2)不允许对结构体变量进行整体的输入输出如:scanf(“%s%c%d%f”,&stu1);(3)假如结构体变量类型相同,能够互相赋值。

stu1=stu2;(4)严格区分类型与变量的概念。(5)假如结构体成员本身又是结构体类型的,那么可接着使用成员运算符取结构体成员的结构体成员,逐级向下,引用最低一级的成员。程序只能对最低一级的成员进行运算。例如,对stu1某些成员的访问:

stu1.birthday.day=23;

stu1.birthday.month=8;

stu1.birthday.year=1985;说明(1)结构体类型变量的各成员(分量)必须单独引用,成员运算结构体变量的初始化结构体变量能够在定义时初始化。格式struct结构体名{

成员表;

}结构体变量={初始化数据表};例

structstudent{charname[10];charsex;intage;floatscore;}stu1,stu2={“Wangwu”,’m’,20,88.5};结构体变量的初始化结构体变量能够在定义时初始化。格式stru一个结构体变量的指针确实是该变量所占据的内存段的起始地址。能够定义一个指针变量,用来指向一个结构体变量,如今该指针变量的值是结构体变量的起始地址。【四】结构体类型指针一个结构体变量的指针确实是该变量所占据的内存例如:structstudent*pstu,stu;pstu=&stu;定义了一个指针变量pstu,并使指针指向结构体变量stu。*pstu表示指针pstu所指示的结构体变量(对象)stu,因而,其成员表示为(*pstu).name,(*pstu).age。指向结构体变量的指针定义格式struct类型名*指针变量名;

为方便起见,C语言定义了结构体的指针变量引用结构体成员的特殊形式:

指针变量名->成员名“->”为指向运算符上面例如(*pstu).name,(*pstu).age。能够等价表示为:

pstu->name,pstu->age例如:structstudent*pstu,s使用VC++调试程序使用VC++调试程序调试程序调试运行单步跟踪单步跳进跟踪观察自动变量观察其他变量停止调试调试程序调试运行1:打开jiecheng项目(双击jiecheng.dsw文件)2:build该项目,确定程序能够运行3:调试运行阶乘程序4:设置断点5:再次调试运行程序6:使用单步执行程序到结束1:打开jiecheng项目(双击jiecheng.dsw文1:打开jiecheng项目1:打开jiecheng项目2:Build该项目,确定程序能够运行2:Build该项目,确定程序能够运行3:调试运行阶乘程序Go3:调试运行阶乘程序Go4:设置断点将鼠标停留在程序的第8行,在第8行的任意地方单击鼠标左键(第8行即“i=i*4;”)在工具栏上选择按钮,为第8行设置断点,以便让程序在此处暂停运行4:设置断点将鼠标停留在程序的第8行,在第8行的任意地方单击5:再次调试运行阶乘程序注意观察,现在调试运行程序会如何?Go5:再次调试运行阶乘程序注意观察,现在调试运行程序会如何?G5:再次调试运行阶乘程序(续)程序暂停之处调试(Debug)工具:控制程序前进步伐查看程序当前状态5:再次调试运行阶乘程序(续)程序暂停之处调试(Debug)6:使用单步执行到程序结束设置断点以后,调试运行程序时,程序开始执行,同时运行到断点处暂停下来,如今我们有机会观察程序的运行情况,同时诊断程序目前的状态是否如我们所预期的那样。不过我们先不着急观察程序的状态,而是来看看如何控制程序的运行,以便在我们需要的时候让程序暂停下来,并且以我们需要的方式走走停停!6:使用单步执行到程序结束设置断点以后,调试运行程序时,程序6:使用单步执行到程序结束程序停下来了,如何让程序从暂停的地方接着向前执行?方法是使用单步执行手段(StepOver)让程序向前走一步停止调试停止调试并重新启动调试单步执行当前位置6:使用单步执行到程序结束程序停下来了,如何让程序从暂停的地熟悉调试工具栏和菜单(只在调试运行时出现)对比调试运行时出现的调试菜单“Debug”和调试工具栏,依照图标查找对应项熟悉调试工具栏和菜单(只在调试运行时出现)对比调试运行时出现观察自动变量自动变量观察自动变量自动变量观察变量的值及其随程序运行时的变化情况设置断点,调试运行程序,如今程序暂停在断点处等待选择Debug菜单,找到最后一项“QuickWatch”并点击观察变量的值及其随程序运行时的变化情况设置断点,调试运行程序输入想要观察的变量变量名变量的值点击AddWatch输入想要观察的变量变量名变量的值点击AddWatch点击Addwatch,看到如下画面点击Addwatch,看到如下画面调试观察每一步骤变量i的值点击单步执行按钮或者菜单,程序那么向前单独运行一个步骤每向前执行一步,就会暂停下来,如此我们就有充足的时间观察所关心的变量名称观察变量i的值的情况调试观察每一步骤变量i的值点击单步执行按钮或者菜单,程序那么注意在调试过程中断点不能设置在空白行上面添加断点和删除断点的方法一样一个程序中能够设置多个断点按下F5键可以让程序从当前位置向前执行,直到遇见下一个断点或者程序结束注意在调试过程中断点不能设置在空白行上面相关C语言基础知识指针:结构体:相关C语言基础知识指针:指针指针新建VisualC++程序【四】利用已有的程序编写新程序无论是控制台程序,或者是Windows窗口程序,VisualC++都会要求有对应的项目文件。而且在大多数情况下,C程序的差不多框架基本上一致的,例如:都有主函数等等。因此在编写一个新的程序时,能够利用往常编写过的程序,其操作方法有两种。(1)程序复用操作将已有的程序复用到新程序上的方法很简单,确实是将程序内容通过“复制―粘贴”实现。(2)项目复用操作打开已有的项目文件,将原来的文件删除,利用项目管理增加新程序文件或资源元素等。新建VisualC++程序【四】利用已有的程序编写新程序新建VisualC++程序【五】项目管理无论项目是否建立,只要开始程序的编译、链接、运行或调试过程,VisualC++就会按项目管理方式进行控制。例如:当使用文件新建方式建立一个源程序文件后,只要开始编译则VisualC++会自动提示创建项目。

新建VisualC++程序【五】项目管理新建VisualC++程序新建VisualC++程序地址和指针的概念【一】指针概述:1、“&”:地址运算符2.“*”:指针运算符,取其指向的内容:

exp:&a:变量a的地址:*p:变量p的内容;注:“&”不能施加在常数,常量和表达式上;地址和指针的概念【一】指针概述:【二】指针变量:

存放某种变量地址的变量称为指针变量。1035….ab20172018p2010q2012因此,在C语言中,将地址形象化地称为指针1035….ab20172018p2010q2012因此,在定义一个指针变量

指针变量的定义一般形式为:基类型*指针变量名;例如:

inti,j,*pi,*pj;floatx,y,*p1,*p2;指针变量的赋值:使得指针变量指向变量指针变量名=&变量名;如:pi=&i;pj=&j;p1=&y;p2=&x;注意:指针变量只能存放指针(地址),且只能是相同类型变量的地址。例如,指针变量pi、pj,只能接收int型、p1,p2只能接收float型的地址,否那么出错。定义一个指针变量指针变量的定义一般形式为:例如:结构体结构体指针变量的引用在程序中,能够用:*指针变量名代替其所指变量。如假设:

inti,*p;p=&i;则i=5;与*p=5;的作用相同,即可用*p代替i,这里*号称为指针运算符(或称为间接访问运算符)指针变量的引用在程序中,能够用:*指针变量名代替其所指指针变量作为函数参数实参:变量地址或已赋值的指针变量,形参:指针变量功能:地址传送方式,会将改变后的值带回。例10.3通过函数调用实现例10.2的功能。swap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}main(){inta,b,*pointer1,*pointer2;scanf("%d%d",&a,&b);pointer1=&a;pointer2=&b;if(a<b)swap(&a,&b);printf("\n%d,%d",a,b);}指针变量作为函数参数实参:变量地址或已赋值的指针变量,形参:数组与指针1.概念数组的指针──数组在内存中的起始地址,用数组名表示2.指向数组的指针变量---赋于数组名的指针变量例如,inta[10],*p=a(或*p=&a[0]);

或者:

inta[10],*p;p=a;数组与指针1.概念3.通过指针引用数组元素假如有“inta[10],*p=a;”,那么:(1)p+i==a+i==&a[i]。(2)*(p+i)==*(a+i)==a[i]。(3)p[i]==*(p+i)==a[i]。注意:p+1指向数组的下一个元素,而不是简单地使指针变量p的值+1。事实上际变化为p+1*size(size为一个元素占用的字节数)。例如,假设指针变量p的当前值为3000,则p+1为3000+1*2=3002,而不是30013.通过指针引用数组元素用数组名作为函数参数形参:数组或指针变量实参:数组名或指向数组的指针变量传递方式:地址传送方式作用:假设函数中对数组作了修改,那么调用函数中的数组也会作同样的修改用数组名作为函数参数指向函数的指针1.函数指针的概念

一个函数在编译时,被分配了一个入口地址,那个地址就称为该函数的指针。能够用一个指针变量指向一个函数,然后通过该指针变量调用此函数。

指向函数的指针2.指向函数的指针变量

(1)定义格式函数类型(*指针变量)();

注意:“*指针变量”外的括号不能缺,否那么成了返回指针值的函数。

例如,int(*fp)();/*fp为指向int函数的指针变量*/

使用VC++调试程序课件(2)赋值

函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。

指向函数的指针变量=[&]函数名; 注意:函数名后不能带括号和参数;函数名前的“&”符号是可选的。(2)赋值

函数名代表该函数的入口地址。因此,可用函数名(3)调用格式

(*函数指针变量)([实参表])3.指向函数的指针变量作函数参数指向函数的指针变量的常用用途之一,确实是将函数指针作参数,传递到其它函数。注意:对指向函数的指针变量,诸如p+i、p++/p--等运确实是没有意义的。例10.24

设有一个函数process,在调用它时,每次实现不同的功能。输入a和b两个数,第一次调用时找出a与b中的大者,第二次找出小者,第三次求和。(3)调用格式#include<stdio.h>voidmain(){intmax(int,int);intmin(int,int);intadd(int,int);intprocess(int,int,int(*fun)());inta,b;printf("enteraandb:");scanf("%d%d",&a,&b);printf("\nmax=");process(a,b,max);printf("\nmin=");process(a,b,min);printf("\nsum=");process(a,b,add);}#include<stdio.h>max(intx,inty){returnx>y?x:y;}min(intx,inty){returnx>y?y:x;}add(intx,inty){returnx+y;}process(intx,inty,int(*fun)(int,int))/*fun是一个指向函数的指针,该函数是一个有两个整型参数的返回整型值的函数*/{intresult;result=(*fun)(x,y);printf("%d\n",result);}max(intx,inty)返回指针值的函数一个函数能够返回一个int型、float型、char型的数据,也能够返回一个指针类型的数据。返回指针值的函数(简称指针函数)的定义格式如下:

函数类型*函数名(形参表列)

例如:

int*a(intx,inty);该函数的函数名为a,返回的是一个整型的指针。返回指针值的函数一个函数能够返回一个int型、float指针数组指针数组的概念

数组的每个元素基本上一个指针数据。指针数组比较适合用于指向多个字符串,使字符串处理更加方便、灵活。

数据类型*数组名[元素个数]

例如:int*p[4];char*string[10];指针数组指针数组的概念

数组的每个元素基本上一个指针数p指向数组a易混淆的问题*p++,*p(++),*(++p),(*p)设P指向a数组中的第i个元素:*(p--)==a[i--];*(--p)==a[--i];*(++p)==a[++i].p指向数组a易混淆的问题*p++,*p(++),*(++p)结构体结构体例:描述一个学生的姓名、学号、性别、年龄。每个学生都有如此的属性,它们构成一个描述学生具体情况的一个整体。而每个属性又是一个差不多的类型,本例中可分别用字符数组、长整型、字符型、和整型来描述。【一】结构体类型的定义结构体概念的引入数据的描述:差不多类型:整型、实型、字符型。数组:属于同一种类型的元素的集合。有时,需要用不同的数据类型来描述一个事物的各方面属性,故此,C语言引入了结构体的概念。例:【一】结构体类型的定义结构体概念的引入数据的描述:struct结构体类型名{类型标识符成员名1;类型标识符成员名2;

……

类型标识符成员名n;};结构体类型的定义如:structstudent{charname[10];longid;chargender;intage;}注意:structstudent应作为一个类型整体,name[10]、id、gender、age基本上其成员。

struct及花括号后的“;”不能省。struct结构体类型名结构体类型的定义如:注意:str定义结构体类型,描述以下数据

structstudent{intno;/*学号*/charname[10];/*姓名*/charsex;/*性别*/intage;/*年龄*/floatscore[10];/*成绩*/};结构体类型的举例(1)学生情况:包含学生的学号、姓名、性别、年龄、10门课程成绩:结构体类型能够嵌套定义即一个结构体类型中的某些成员又是其他结构体类型注意定义结构体类型,描述以下数据

struct例如,对已定义的结构体类型structstudent,能够定义结构体变量:

structstudentzhang,stu1;

【二】结构体变量结构体变量的定义1.先定义结构体类型,再定义结构体变量格式:struct结构体名结构体变量名表;三种方法:例如,对已定义的结构体类型structstudent,2.在定义结构体类型的同时定义变量例如:structstudent{charname[10];charsex;intage;floatscore;}stu1,stu2;格式:struct结构体类型名

{类型标识符成员名1;类型标识符成员名2;

……

类型标识符成员名n;

}变量名表;2.在定义结构体类型的同时定义变量例如:structs3.用匿名形式直截了当定义结构体类型变量(不出现结构体名)例如:struct{charname[10];charsex;intage;floatscore;}stu1,stu2;格式:struct{类型标示符成员名1;类型标示符成员名2;

……

类型标示符成员名n;

}变

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论