C语言实验报告《指针》
C语言实验报告《指针》
篇一:
C语言实验报告8《指针》嘉应学院计算机学院实验报告课程名称指导老师班级 C语言程序设计实验名称实验时间姓名指针实验地点提交时间座号
一、实验目的和要求
(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;
(2)能正确使用数组的指针和指向数组的指针变量;
(3)能正确使用字符串的指针和指向字符串的指针变量;
(4)了解指向指针的指针的概念及其使用方法。
二、实验环境、内容和方法实验内容:
编一个函数void fun{int i; *odd=0;*even=0; for*even+=a; else *odd+=a;}} int main{int n,*a,odd = 0,even = 0,i;printf* n);  printf sanf{ int a,m,i,*p,n,; printf{ sanfp++; =*p;
for{ a=a; } a=m; for{ printf{ a=a; } a=m; 这一步没有注意a=m 和a=m中i++和i+1不同,a=m是先将的值赋给a,然后在执行自增;而在实验过程中忽略了这一点,造成了不必要的麻烦; 8 实验心得通过这次指针实验掌握了指针的概念,会定义和使用指针变量,并且能利用指针来简单化一些问题,给以后的编程带来了很大的便利;
篇三:
语言指针实验报告  C语言实习报告题目:
指针及其应用系别:
专业:
姓名:
学号:
日期:
一实验名称:
指针及其应用二实验目的:
(1)掌握变量的指针及其基本用法。
(2)掌握一维数组的指针及其基本用法。
(3)掌握指针变量作为函数的参数时,参数的传递过程及其用法。三实验内容:
(1)运行以下程序,并从中了解变量的指针和指针变量的概念。
(2)运行以下程序,观察a、a和p的变化,然后回答以下问题:
1. 程序的功能是什么?
在开始进入循环体之前,p指向谁?
3. 循环每增加一次,p的值(地址)增加多少?它指向谁?
4. 退出循环后,p指向谁?
5. 你是否初步掌握了通过指针变量引用数组元素的方法?
(3)先分析以下程序的运行结果,然后上机验证,并通过此例掌握通过指针变量引用数组元素的各种方法。
(4)编写函数,将n个数按原来的顺序的逆序排列(要求用指针实现),然后编写主函数完成:
① 输入10个数;
② 调用此函数进行重排;
③ 输出重排后的结果。四分析与讨论:
(1)指针的定义方法,指针和变量的关系。定义方法:
数据类型 *指针变量名; 如定义一个指向int型变量的指针——int *p;则我们可以继续写如下代码—— int a = 4; p = a; printf; 在这里,我们定义了一个变量a,我们把它理解为内存空间连续的4个字节(int型占用4字节),则这4个字节的空间保存着一个数4。是取地址符号,即把变量a的地址(即这4个字节的首地址)赋给指针p (记住指针p的类型和变量a的类型要保持一致,否则的话,要进行类型转换)。这样子,指针p就保存着变量a的地址。我们如果把指针p当做内存空间里面另外一个连续的4个
字节,那么这4个字节保存的数就是变量a的地址。printf和printf的结果是一样的。这里的*是取变量符号(与刚好作用相反,通过变量的地址到变量),与定义时int *p的*号作用不同(定义时的*表示该变量是个指针变量,而非是取它指向的变量)。
(2)数组和指针的关系。指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,着重讨论指针与数组之间的联系及在编程中的应用。
1.指针与数组的关系当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:
har str, *ptr; ptr=str; ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地
址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下标变量访问,也可以用指针访问。c语言指针实验总结
2.指向数组元素的指针若有如下定义:
int a, *pa; pa=a; 则p=a是将数组第1个元素的地址赋给了指针变量p。实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:
p=a或p=a。这两种方法在形式上相像,其区别在于:
pa是指针变量,a是数组名。值得注意的是:
pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+=10,而pa++、++pa、pa+=10则是正确的。由此可见,此时指针与数组融为一体。
3.指针与一维数组理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组织形式和对数组元素的访问方法。一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。实际上编译系统将数组元素的形式a转换成*,然后才进行运算。对于一般数组元素的形式:
<;数组名,编译程序将其转换成:
*,其中下标表达式为:
下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:
*<;地址=<;地址所对应单元的地址的内容。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。
4.指针与多维数组用指针变量可以指向一维数组,也可以指向多维数组。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。例如,在一个三维数组中,引用元素的地址计算最终将换成:
*+j)+k)。了解了多维数组的存储形式和访问多维数组元素的内部转换公式后,再看当一个指针变量指向多维数组及其元素的情况。 1 指向数组元素的指针变量若有如下说明:
int a; int *p; p=a; p是指向整型变量的指针;p=a使p指向整型二维数组a的首地址。*+2)表示取a的内容;*p表示取a的内容,因为p是指向整型变量的指针;p++表示p的内容加1,即p中存放的地址增加一个整型量的字节数
2,从而使p指向下一个整型量a 。 2 指向由j个整数组成的一维数组的指针变量当指针变量p不是指向整型变量,而是指向一个包含j个元素的一维数组。如果p=a,则p++不是指向a,而是指向a。这时p的增值以一维数组的长度为单位。
5.指针与字符数组 C语言中许多字符串操作都是由指向字符数组的指针及指针的运算来实现的。因为对于字符串来说,一般都是严格的顺序存取方式,使用指针可以打破这种存取方式,更为灵活地处

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。