C语言实验报告《指针》.doc
单片机C语言指针的指针

单片机C语言指针的指针
指针的指针
一个指针变量内部可以存储一个值,这个值是另外一个对象的地址,所以我
们说一个指针变量可以指向一个普通变量,同样这个指针变量也有一个地址,
也就是说有一个东西可以指向这个指针变量,然后再通过这个指针变量指向这个对象。
那么如何来指向这个指针变量呢?由于指针变量本身已经是一个指
针了(右值),那么我们这里就不能用一般的指针了,需要在指针上体现出来这些特点,我们需要定义指针的指针(二重指针)。
int *p1=i;
int**p2=p1;
综合以上的所有点,下面是我们常常看到一些匹配(也是经常出错的地方):
int a[3],b[2][3],c,*d[3];void fun1(int *p);void fun2(int (*p)[3]);void fun3(int **p); void fun4(int p[3]);void fun5(int p[]);void fun6(int p[2][3]);void fun7(int (p)[3]);函数不会产生编译时刻的可能值(但逻辑上不一定都对)--这里我觉得应该是有效的值
为什么可以有这样的搭配,原因如下:
对于fun1 fun4 fun 5: 在编译器看来fun1,fun4,fun5 的声明是一样,在编译时候,编译器把数组的大小舍去不考虑,只考虑它是一个指针,也就是说有没有
大小说明是一样的,所以三者的形式都是fun1 的形式(其实只要提供了int*指
针就可以了);
对于fun7 :以上的解释对于引用是不适用的,如果变量被声明为数组的引用,那么编译器就要考虑数组的大小了,那么必须和声明一模一样(所以fun7。
《C语言程序设计》第8章指针

10.3.3 指针变量和数组作函数参数 数组名作形参时,接收实参数组的起始地址;
作实参时,将数组的起始地址传递给形参数组。
引入指向数组的指针变量后,数组及指向数 组的指针变量作函数参数时,可有4种等价形式 (本质上是一种,即指针数据作函数参数):
(1)形参、实参都用数组名 (2)形参、实参都用指针变量 (3)形参用指针变量、实参用数组名 (4)形参用数组名、实参用指针变量
(4)指针变量的++、--与&、*的结合
对于指针变量的++、--与&、*的结合 使用,关键要注意按照运算符的优先级和 结合性进行。
例如: int a=2, *p; p=&a;
•表达式:(*p)++,按运算符的优先级,等价于 a++。其含义为:取出指针变量p所指向的内存单 元的值(即a的值),a的值加1,送回a的内存单 元,a的值变为3,p的值未发生变化,仍然指向 变量a。
程序说明:printf("%s\n",s);语句 通过指向字符串的指针变量s,整体引
用它所指向的字符串的原理:系统首先输出s 指向的第一个字符,然后使s自动加1,使 之指向下一个字符;重复上述过程,直至遇到 字符串结束标志。
main() { char string[ ]=”I love Beijing.”; printf(“%s\n”,string); }
3.数组元素的引用 数组元素的引用,既可用下标法,也可用
指针法。
10.3.2 通过指针引用数组元素 如果有“int a [10],*p=a;” ,则: (1)p+i和a+i都是数组元素a [i]的地址。
(2)*(p+i)和*(a+i)就是数组元素a [i]。 int a [3]; a [0]——*a a [1]——*(a +1) a [2]——*(a +2)
C语言实验报告范文

计算机科学与技术系C语言实验报告实验名称:指针及其应用日期:得分:指导老师:专业:班次:姓名:学号:实验目的(1)掌握变量的指针及其基本用法。
(2)掌握一维数组的指针及其基本用法。
(3)掌握指针变量作为函数的参数时,参数的传递过程及其用法。
一.实验内容(1)运行以下程序,并从中了解变量的指针和指针变量的概念。
(2)运行以下程序,观察&a[0]、&a[i]和p的变化,然后回答以下问题:1.程序的功能是什么?2.在开始进入循环体之前,p指向谁?3.循环每增加一次,p的值(地址)增加多少?它指向谁?4.退出循环后,p指向谁?5.你是否初步掌握了通过指针变量引用数组元素的方法?(3)先分析以下程序的运行结果,然后上机验证,并通过此例掌握通过指针变量引用数组元素的各种方法。
(4)编写函数,将n个数按原来的顺序的逆序排列(要求用指针实现),然后编写主函数完成:①输入10个数;②调用此函数进行重排;③输出重排后的结果。
二.分析与讨论(1)指针的定义方法,指针和变量的关系。
定义方法:数据类型 *指针变量名;如定义一个指向int型变量的指针——int *p;则我们可以继续写如下代码——int a = 4;p = &a;printf("%d", *p);在这里,我们定义了一个变量a,我们把它理解为内存空间连续的4个字节(int型占用4字节),则这4个字节的空间保存着一个数4。
&是取地址符号,即把变量a的地址(即这4个字节的首地址)赋给指针p(记住指针p的类型和变量a的类型要保持一致,否则的话,要进行类型转换)。
这样子,指针p就保存着变量a的地址。
我们如果把指针p当做内存空间里面另外一个连续的4个字节,那么这4个字节保存的数就是变量a的地址。
printf("%d",*p)和printf("%d",a)的结果是一样的。
这里的*是取变量符号(与&刚好作用相反,通过变量的地址找到变量),与定义时int *p的*号作用不同(定义时的*表示该变量是个指针变量,而非是取它指向的变量)。
《C语言程序设计》实验报告

(此文档为word格式,下载后您可任意编辑修改!)《C语言程序设计》实验报告2012~2013学年第二学期班级姓名学号指导教师实验一实验项目名称:C程序的运行环境和运行C程序的方法所使用的工具软件及环境:Visual C++6.0一、实验目的:1.了解在Visual C++6.0环境下如何编辑、编译、连接和运行一个C程序;2.通过运行简单的C程序,初步了解C源程序的特点。
二、预习内容:教材《C语言程序设计教程》第1章。
三、实验内容:1.在Visual C++6.0环境下输入并运行下面的程序:#include<stdio.(){printf("This is a C program.\n");return0;}2.在Visual C++6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误,然后运行程序,并观察分析运行结果。
#include<stdio.(){int a,b,suma=3;b=4;sun=a+b;print("%d+%d=%d\n",a,b,sum);return0;}四、实验结果:1.运行结果(或截图):2.(1)改正后的源程序:(2)运行结果(或截图):五、思考题:1.一个C程序上机的步骤有哪些?答:2.组成C程序的基本单位是函数,一个函数包括哪几个部分?答:成绩指导教师签名实验二实验项目名称:数据类型、运算符和表达式所使用的工具软件及环境:Visual C++6.0一、实验目的:1.掌握整型、实型与字符型这三种基本类型的概念;2.掌握常量及变量的使用方法;3.掌握基本算术运算符及其表达式的使用方法;4.掌握++、--运算符、赋值运算符及其表达式的使用方法。
二、预习内容:教材《C语言程序设计教程》第2章。
三、实验内容:1.在Visual C++6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误。
#include<stdio.(){int2cd=3;floatπ=3.14;char for=′A′;printf("%d,%f,%c\n",2cd,π,for);return0;}2.在Visual C++6.0环境下输入并运行下面的程序,观察分析运行结果。
C语言中指针的应用

内存 为 其 分 配 2 个字 节 的 存储 单元 , 变量 C 浮 点型 ,内存为 其 分 配 4 是 个字 节的存 储 单元 。 内存为 变量 分 配存储 空 间 的首 个字 节单 元 的地址 称 为该 变 量 的地 址 。如 a的地 址 是 10 , 0 0 b的地 址 是 10 ,C 0 1 的地 址 是 10 。 由此可 03 见, 地址 就 是用 来标 识 每 一个 存 储单 元 的 , 以方 便 用 户对 存 储 单元 中的数 据 能够 正确 访 问 , 高级 语 言 中就 形象 地 将地 址 称为 指 针 。 针 可 以用 来指 向 在 指 变量 、 组 及 其 元 素 、 构 体 、 指 针 ( 为 多级 指 针 ) ,但不 能 用指 针 数 结 和 称 等 来 指 向表 达 式 、 量和 寄 存 器变 量 等 , 为这 些 对 象 没 有地 址 的 概 念 。 常 因
在 E 中 , 针 p itr 类型 是 it , 指 向 的类 型是 it 它 被 初始 例 指 one 的 n* 它 n, 化 为 指 向整 形 变 量 a 。接 下来 的 语 句 中 , 针 p itr被 加 了 1 编 译器 是 指 one , 这 样 处 理 的 : 把指 针 p itr 它 one 的值 加 了 s e f it ( l 位 程 序 中 , i o ( )在 6 z n 是
( )指 针 变 量 的 引 用 2
/ 此 处 略去 为 整 型数 组 赋值 的 代码 。 / fr(- ;< 0; o i0i2 i ++) {
…
(p itr +; * one )十
p n e ++ ; Oห้องสมุดไป่ตู้ t r
} 这 个 例 子 将 整 型 数 组 中 各 个元 素 的值 加 1 由于 每 次 循环 都 将 指 针 。 p itr加 1 以 每次 循 环都 能 访 问 数组 的下 一个 元 素 。 on e 所 所 以 ,一 个 指针 p i tr l 上一 个 整数 n后 ,结果 是一 个新 的指 针 one od加 p it w ,o tme one me p i e w的类 型和p itrl的类 型相 同 ,0 tr w所 指 向的 n oneod pi e n 类型 和D it od ̄指向的 类型 也相 同 。onenw的值 将  ̄p itrl的值增 one l): r ) i p itre goneo d 加 了 n 乘 s f(oneod  ̄ mo p it l所指 向 的类型 ) r 个字节 。 就是 说 , one w所 指 p itme 向的 内存 区将 比 p itrl 指 向的 内存区 向高地 址方 向移 动了 n 乘 s ef oneod所 i o z
《C语言程序设计》实验报告实验六

《C语言程序设计》实验报告实验六使用指针的程序设计学号姓名一、实验目的1、掌握指针的概念,会定义和使用指针变量;2、能正确使用数组的指针和指向数组的指针变量;3、熟悉指针作为函数参数的定义和调用方法;4、能正确使用字符串的指针和指向字符串的指针变量。
二、实验内容1.分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。
#include <stdio.h>void main(){int *p1,*p2,*p;int a,b;printf("Input a b please");scanf("%d%d",&a,&b);p1=&a;p2=&b;if(a>b){ p=p1;p1=p2;p2=p;}printf("*p1=%d, *p2=%d\n",*p1,*p2);printf("a=%d, b=%d\n",a,b);}『运行结果:』输入1,2得:*p1=1,*p2=2a=1,b=2输入2,1得:*p1=1,*p2=2a=2,b=1输入56,123得:*p1=56,*p2=123a=56,b=1232.下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组中数据的个数,利用指针odd返回奇数之和,利用指针even 返回偶数之和。
请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。
#include <stdio.h>#define N 10void fun(int *a,int n,int *odd,int *even){int m;*odd=0; *even=0;for(m=0;m<n;m++)if(*(a+m)%2==0)*even+=*(a+m);else*odd+=*(a+m);}void main(){int a[N]={1,10,2,3,19,6},i,n=6,odd,even;printf("The original data is:\n");for(i=0;i<n;i++)printf("%5d",*(a+i));printf("\n\n");fun(a,n,&odd,&even);printf("The sum of odd numbers:%d\n",odd);printf("The sum of even number:%d\n",even);}『运行结果:』3.编程实现从键盘输入一个字符ch和一个字符串str,利用字符指针实现删除字符串str中和字符ch相等所有字符,然后输出字符串str。
C语言指针初探

1指针
址、 内存单元的 内容 的基本 概念 。 内存是 由许 多个大小完全 一
4 指针与函数
指针可 以指 向 整 型变量、 字符 串、 数 组、 也可 以指 向一个函
理解指针首先要了解内存, 掌握内存单元、 内存单元的地 4 . 1函数指针
致 的存储 单元 构成 。 每一 个存 储单元容量为一个 字节。 为将 各 数 。 一 个函数在编译是被分 配给 一个入 口地址 。 这个 函数 的入 然后 存储单元区别开, 给每个存储单元一个对应的编号称为存储单 口地址 就称为函数的指针。即用一个指针变 量指 向函数 , 元的地址。 而存储单元中存储的数据称为存储单元的内容 。 通过该指针变量调用此函数 。 例如: i n t p )( i n t , i n t ) ; 表 示 在计算 机中, 所 有数据都 被放在 内存 中。 如果在程 序 中定 定义了一个指 向函数的指针变 量P , p 用来存放 函数入 口地 址。 n t p r o c( i n t , i n t ) ;  ̄ l J p = p r o c 是将函数p r o c 的 义了一个变量 , 则程序在编译过程 中由系统给变量 分配 适 当内 若当前有 函数i 存单元。因此, 在程 序中使用的变量就是 内存 中某个存储单元。 为2 0 0 0 的一个存储单元 。 则变 量 i 被存放 在地址 编号为2 0 0 0 的 入 口地址赋 给P , 而用函数 指针变量 调用函数时, 将( 木 p ) 代替 函数 指针变 量通 常是用于把 指针作 为参 数传递 到其他 函 可 以表示为c =( 术 p )( a , b ) , 其中a , b 为实参。 例如 , 程 序 中定义某 字符型变 量 i = ’ A ’ , 编译 时为其分配地 址 函数名, 单元 中, 此单元 中存放 的 内容是’ A ’ 。 地 址指 示出变量 所在 位 数 。 函数 的参 数可 以是多种 类 型 的变量 , 指 向函数 的指 针也 置, 即按变量地 址寻找变量 的值 , 变 量的地址就称为变量 的指 可 以作为 参数 实现 函数地 址 的传 递 , 从而实现 在被 调用 的函 针。 通常用& 表示取变量 的存储地址 , & i = 2 0 0 0 。
C语言实验报告 实验三 参考答案

实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)1. 程序填空题 给定程序BLACK10-1.C 中,函数fun 的功能是:将形参n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n 传回所指变量。
例如,输入一个数:27638496,新的数:为739。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
【解题思路】第一处:t 是通过取模的方式来得到*n 的个位数字,所以应填:10。
第二处:判断是否是奇数,所以应填:0。
第三处:最后通形参n 来返回新数x ,所以应填:x 。
2. 程序改错题 给定程序MODI10-1.C 中函数fun 的功能是: 计算n 的5次方的值(规定n 的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。
例如,7的5次方是16807, 其低3位数的和值是15。
【解题思路】第一处:变量d 的初始值应为1。
第二处:整除的符号是 /。
3. 程序设计题 请编写函数fun ,它的功能是:求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。
【解题思路】本题是求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
【参考答案】void fun ( int x, int pp[], int *n ){ int i; *n=0;for(i=1; i <= x; i++)if((x % i== 0) && (i % 2)) pp[(*n)++]=i;}4. 程序填空题 给定程序中,函数fun 的功能是:找出N ×N 矩阵中每列元素中的最大值,并按顺序依次存放于形参b 所指的一维数组中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言实验报告《指针》
学号:__________ 姓名:__________ 班级:__________ 日期:__________
指导教师:__________ 成绩:__________
实验五指针
一、实验目的
1、掌握指针的概念、会定义和使用指针变量
2、掌握指向数组的指针变量
3、掌握字符串指针的使用
二、实验内容2、写一函数,求一个字符串的长度。
在main函数中输入字符串,并输出其长度。
(习题10.6)#include #include
long fun(char *p)
{
填写程序
}
void main()
{
char s[6];
long n;
printf( enter a string:n
gets(s);
n=fun(s);
printf( %ldn ,n);
}
一、三、实验步骤与过程
四、程序调试记录
C语言实验报告《综合实验》
学号:__________ 姓名:__________ 班级:__________ 日期:__________
指导教师:__________ 成绩:__________
实验六综合实验
一、实验目的
1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。
2、掌握C程序的结构化程序设计方法,能使用C语言开发简单的应用程序。
3、掌握C程序的运行、调试方法等。
二、实验内容
编写一个学生信息排序程序。
要求:
1、程序运行时可输入n个学生的信息和成绩(n预先定义)。
2、学生信息包括:学号、英文姓名、年龄;学生成绩包括:语文、数学、计算机。
3、给出一个排序选择列表,能够按照上述所列信息(学号、姓名、年龄、语文、数学、计算机)中的至少一个字段进行排序,并显示其结果。
1、使用函数方法定义各个模块。
三、实验步骤与过程
物理实验报告·化学实验报告·生物实验报告·实验报告格式·实验报告模板
四、程序调试记录。