null使用VC++6.0调试程序使用VC++6.0调试程序调试程序调试程序调试运行
单步跟踪
单步跳进跟踪
观察自动变量
观察其他变量
停止调试null1:打开jiecheng项目(双击jiecheng.dsw文件)
2:build该项目,确定程序可以运行
3:调试运行阶乘程序
4:设置断点
5:再次调试运行程序
6:使用单步执行程序到结束1:打开jiecheng项目1:打开jiecheng项目2:Build该项目,确定程序可以运行2:Build该项目,确定程序可以运行3:调试运行阶乘程序3:调试运行阶乘程序4:设置断点4:设置断点将鼠标停留在程序的第8行,在第8行的任意地方单击鼠标左键(第8行即“i = i*4;”)
在工具栏上选择 按钮,为第8行设置断点,以便让程序在此处暂停运行5:再次调试运行阶乘程序5:再次调试运行阶乘程序注意观察,现在调试运行程序会如何?5:再次调试运行阶乘程序(续)5:再次调试运行阶乘程序(续)6:使用单步执行到程序结束6:使用单步执行到程序结束设置断点以后,调试运行程序时,程序开始执行,并且运行到断点处暂停下来,此时我们有机会观察程序的运行情况,并且诊断程序目前的状态是否如我们所预期的那样。
不过我们先不着急观察程序的状态,而是来看看如何控制程序的运行,以便在我们需要的时候让程序暂停下来,并且以我们需要的方式走走停停!6:使用单步执行到程序结束6:使用单步执行到程序结束程序停下来了,如何让程序从暂停的地方继续向前执行?
方法是使用单步执行手段(Step Over)让程序向前走一步熟悉调试工具栏和菜单(只在调试运行时出现)熟悉调试工具栏和菜单(只在调试运行时出现)对比调试运行时出现的
调试菜单“Debug”和调试
工具栏,根据图标查找
对应项观察自动变量观察自动变量自动变量观察变量的值及其随程序运行时的变化情况观察变量的值及其随程序运行时的变化情况设置断点,调试运行程序,此时程序暂停在断点处等待
选择Debug菜单,找到
最后一项“Quick Watch”
并点击null点击Add Watch点击Add watch,看到如下画面点击Add watch,看到如下画面调试观察每一步骤变量i的值调试观察每一步骤变量i的值点击单步执行按钮或者菜单,程序则向前单独运行一个步骤
每向前执行一步,就会暂停下来,这样我们就有充足的时间观察所关心的变量名称
观察变量i的值的情况注意在调试过程中注意在调试过程中断点不能设置在空白行上面
添加断点和删除断点的方法一样
一个程序中可以设置多个断点
按下F5键可以让程序从当前位置向前执行,直到遇见下一个断点或者程序结束
相关C语言基础知识相关C语言基础知识指针:
结构体:指针指针新建Visual C++程序新建Visual C++程序四、利用已有的程序编写新程序
无论是控制台程序,或者是Windows窗口程序,Visual C++都会要求有对应的项目文件。而且在大多数情况下,C程序的基本框架都是一致的,例如:都有主函数等等。所以在编写一个新的程序时,可以利用以前编写过的程序,其操作方法有两种。
(1)程序复用操作
将已有的程序复用到新程序上的方法很简单,就是将程序内容通过“复制―粘贴”实现。
(2)项目复用操作
打开已有的项目文件,将原来的文件删除,利用
项目管理
工程项目管理制度介绍工程项目管理课程设计政府投资项目管理意见建设工程项目管理合同工程项目管理培训总结
增加新程序文件或资源元素等。 新建Visual C++程序新建Visual C++程序五、项目管理
无论项目是否建立,只要开始程序的编译、链接、运行或调试过程,Visual C++就会按项目管理方式进行控制。
例如:当使用文件新建方式建立一个源程序文件后,只要开始编译则Visual C++会自动提示创建项目。 新建Visual C++程序新建Visual C++程序地址和指针的概念地址和指针的概念一、指针概述:
1、“&” :地址运算符
2. “*” :指针运算符,取其指向的内容:
exp:
&a: 变量a的地址:
*p: 变量p的内容;
注: “&” 不能施加在常数,常量和表达式上;null
二、指针变量: 存放某种变量地址的变量称为指针变量。 ab20102012因此,在C语言中,将地址形象化地称为指针定义一个指针变量 定义一个指针变量 指针变量的定义一般形式为:
基类型 *指针变量名;例如:
int i, j, *pi, *pj;
float x, y, *p1, *p2;
指针变量的赋值:使得指针变量指向变量
指针变量名=&变量名;
如: pi=&i; pj=&j; p1=&y; p2=&x;
注意:指针变量只能存放指针(地址),且只能是相同类型变量的地址。
例如,指针变量pi、pj,只能接收int型、p1, p2只能接收float型的地址,否则出错。
结构体结构体指针变量的引用指针变量的引用 在程序中,可以用:*指针变量名 代替其所指变量。
如若:
int i, *p;
p=&i;
则 i=5; 与*p=5; 的作用相同,即可用*p代替i,这里*号称为指针运算符(或称为间接访问运算符)指针变量作为函数参数指针变量作为函数参数实参:变量地址或已赋值的指针变量,形参:指针变量
功能:地址传送方式,会将改变后的值带回。例10.3 通过函数调用实现例10.2的功能。
swap(int *p1, int *p2)
{int temp;
temp=*p1; *p1=*p2; *p2=temp;
}
main()
{int a, b, *pointer1,*pointer2;
scanf("%d%d",&a,&b);
pointer1=&a; pointer2=&b;
if(a
void main()
{int max(int,int);
int min(int,int);
int add(int,int);
int process(int, int, int (*fun)());
int a,b;
printf("enter a and b:");
scanf("%d%d",&a,&b);
printf("\nmax=");
process(a,b,max);
printf("\nmin=");
process(a,b,min);
printf("\nsum=");
process(a,b,add);
}nullmax(int x, int y)
{return x>y?x:y;}
min(int x, int y)
{return x>y?y:x;}
add(int x, int y)
{return x+y;}
process(int x, int y, int (*fun)(int,int)) /*fun是一个指向函数的指针,该函数是一个有两个整型参数的返回整型值的函数*/
{int result;
result=(*fun)(x,y);
printf("%d\n",result);
}返回指针值的函数返回指针值的函数 一个函数可以返回一个int型、float型、char型的数据,也可以返回一个指针类型的数据。 返回指针值的函数(简称指针函数)的定义格式如下:
函数类型 *函数名(形参表列)
例如:
int *a(int x,int y);
该函数的函数名为a,返回的是一个整型的指针。指针数组指针数组指针数组的概念 数组的每个元素都是一个指针数据。指针数组比较适合用于指向多个字符串,使字符串处理更加方便、灵活。
数据类型 *数组名[元素个数]
例如: int *p[4]; char *string[10];p指向数组a易混淆的问题p指向数组a易混淆的问题
*p++,*p(++),*(++p),(*p)
设P指向a数组中的第i个元素:
*(p--)==a[i--];
*(--p)==a[--i];
*(++p)==a[++i].null结 构 体null例:
描述一个学生的姓名、学号、性别、年龄。
每个学生都有这样的属性,它们构成一个描述学生具体情况的一个整体。而每个属性又是一个基本的类型,本例中可分别用字符数组、长整型、字符型、和整型来描述。一、结构体类型的定义结构体概念的引入数据的描述:
基本类型:整型、实型、字符型。
数组:属于同一种类型的元素的集合。
有时,需要用不同的数据类型来描述一个事物的各方面属性,故此,C语言引入了结构体的概念。nullstruct 结构体类型名
{ 类型标识符 成员名1;
类型标识符 成员名2;
……
类型标识符 成员名n;
};结构体类型的定义如:
struct student
{ char name[10];
long id;
char gender;
int age;
}注意: struct student 应作为一个类型整体,
name[10]、id、gender、age都是其成员。
struct及花括号后的“;”不能省。定义结构体类型, 描述下列数据
定义结构体类型, 描述下列数据
struct student
{ int no; /*学号*/
char name[10]; /*姓名*/
char sex; /*性别*/
int age; /*年龄*/
float score[10]; /*成绩*/
};结构体类型的举例(1) 学生情况: 包含学生的学号、 姓名、 性别、 年龄、10门课程成绩:结构体类型可以嵌套定义 即一个结构体类型中的某些成员又是其他结构体类型注意null例如,对已定义的结构体类型struct student ,可以定义结构体变量:
struct student zhang ,stu1;
二、结构体变量结构体变量的定义1.先定义结构体类型, 再定义结构体变量格式: struct 结构体名 结构体变量名表;三种方法:null2.在定义结构体类型的同时定义变量例如:struct student
{ char name[10];
char sex;
int age;
float score;
} stu1,stu2;
格式: struct 结构体类型名
{ 类型标识符 成员名1;
类型标识符 成员名2;
……
类型标识符 成员名n;
} 变量名表;null3. 用匿名形式直接定义结构体类型变量(不出现结构体名)例如:struct
{ char name[10];
char sex;
int age;
float score;
} stu1,stu2;格式:
struct
{ 类型标示符 成员名1;
类型标示符 成员名2;
……
类型标示符 成员名n;
} 变量名表;(1)类型与变量是不同的概念,不要混同。对结构体变量来说,在定义时一般先定义一个结构体类型,然后定义变量为该类型。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配存储空间的,只对变量分配存储空间。
(2)对结构体中的成员,可以单独使用,它的作用相当于普通变量。
(3)成员也可以是一个结构体变量。
(4)成员名可与程序中的变量同名,两者不代表同一对象。 结构体的说明null例。定义结构体变量stu1:
struct student stu1;
stu1.age=20;
scanf("%f",&stu1.score);
stu1.age 表示引用结构体变量stu1中的age成员,因该成员的类型为int型,所以可以对它执行任何int型变量可以执行的运算。结构体变量的使用结构体变量一般不整体引用,而是引用其成员变量。成员变量引用格式结构体变量名.成员名其中的圆点运算符称为成员运算符,它的运算级别是最高的。null(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; 说明null结构体变量的初始化结构体变量可以在定义时初始化。格式struct 结构体名
{
成员表;
} 结构体变量={初始化数据表};例
struct student
{ char name[10];
char sex;
int age;
float score;
}stu1,stu2={“Wangwu”,’m’,20,88.5};null 一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以定义一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址 。四、结构体类型指针null例如: struct student *pstu, stu;
pstu=&stu;
定义了一个指针变量pstu,并使指针指向结构体变量stu 。
*pstu 表示指针pstu所指示的结构体变量(对象)stu,因而,其成员表示为(*pstu).name ,(*pstu).age。指向结构体变量的指针定义格式struct 类型名 *指针变量名; 为方便起见,C语言定义了结构体的指针变量引用结构体成员的特殊形式:
指针变量名->成员名
“->”为指向运算符
上面示例(*pstu).name,(*pstu).age。可以等价表示为:
pstu->name, pstu->agenull请
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
下列几种运算:
①p->n
②p->n++
③++p->n总结:结构体成员变量引用方式①结构体变量.成员名
②(*p).成员名
③p->成员名
其中,->称为指向运算符可转换为:
①p->n
②(p->n)++
③++(p->n)