c语言程序设计--指针
C语言程序设计实训教程第7章 指 针
12
2)指针与一维数组 【例 7.6】 下列程序的运行结果是( )。[读 程序写结果,重庆市 2001年第 2次等级考试]
13
14
3)指向字符的指针
15
16
17
18
4)指针与二维数组
19
5)指向一维数组的指针(行指针) 【例 7.18】 对 int(﹡p)[5];的正确描述 是( )。[多选题,重庆市 2003年第 1次等级考 试] A. p是数组名 B. p是指针变量名 C. p数组中有 5个元素 D .p指向一个包含 5个元素的整型数组 E. p是一个整型数组 答案:B D
22
7)指针数组 当数组的元素类型为指针时,叫做指针数组。 【例 7.21】 下列程序的运行结果是( )。 [读程序写结果,重庆市 2004年第 2 次等级考试]
23
8)指针做函数参数 指针做函数参数的主要目的是利用在函数中, 利用指针去操作主调函数中的变量。 【例 7.22】 下列程序在数组中同时查找最大 值下标和最小值下标,并分别存放在 main函数的 变量 max和 min中,请填空。[读程序写结果,重 庆市 2003年第 2次等级考试]
10
【例 7.3】 由于指针的数据类型实际上是指定 指针所能指向对象的数据类型,所以不同数据类型 的指针变量不能相互赋值。( )[判断题,重庆市 2005年第 2次等级考试] 答案:对 分析:在某些特定情况下,可以在不同数据类 型指针之间通过强制类型转换赋值。
11
【例 7.4】 若有定义:long intj,﹡p;,则操 作 j=(long int)p;是合法操作。( )[判断题, 重庆市 2004年第 1次等级考试] 答案:对 【例 7.5】 在 C 语言中,程序
《C语言程序设计教程(第二版)》 第09章-指针(1)
访问p_int所 指向的变量
getch();
}
程序运行结果: num_int=12, *p_int=12 num_f=3.14, *p_f=3.14 num_ch=p, *p_ch=p
2019/2/22
11
1、指针变量的定义
指针变量的定义标识符
数据类型 *指针变量[,*指针变量2……];
例如, [案例9.1]中的语句:
int num_int=12, *p_int ;
特别说明:定义而未初始化的指针变量(例如 p_int)是悬空的。
使用悬空指针变量,很容易破坏系统,导致系统 瘫痪。
2019/2/22
12
2、取地址运算 : &变量名 例 如 , [ 案 例 9.1] 中 的 &num_int 、 &num_f 、 &num_ch 的结果,分别为对应变量的地址 (num_int 、 num_f、num_ch)。 注意:指针变量只能存放相同数据类型变量的 地址。 例如, [案例9.1]中的指针变量p_int、p_f、p_ch, 只能接收int型、float型、char型变量的地址,否则出 错。
使p_int指向变量num_int
2019/2/22
10
printf(“num_int=%d, *p_int=%d\n”, num_int, *p_int); printf(“num_f=%4.2f, *p_f=%4.2f\n”, num_f, *p_f); printf(“num_ch=%c, *p_ch=%c\n”, num_ch, *p_ch);
9.3* 1维数组的指针与列指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 指针数组与主函数main()的参数 9.6 返回指针值的函数
电大C语言程序设计 第5章 指针
计算机科学与技术专业本科
第5章 指针
(一) 教学内容 1. 指针的有关概念; 2. 指针的各种运算 3. 数组元素的指针访问方式 4. 数据存储空间的动态存储分配
第5章 指针
(二) 教学要求 了解:指针的有关概念; 理解:指针的各种运算符的含义,一维和二维 元素的指针访问方式,动态存储分配与释放函 数的含义; 应用:会分析含有指针操作的程序。
第5章 指针 5.3 指针运算 3. 间接访问(*) 操作符*可取指针变量所指单元内容,称为间接引用指针。 *(取内容)和&(取地址)为互逆操作。 #include<stdio.h> void main() { int x=10,y=20; int * xp=&x,*yp=&y; int z=*xp+*yp; printf("%d%d\n",*xp,*yp); *xp+=5; printf("%d%d%d\n",*xp,*yp,z); }
第5章 指针 5.2 指针变量 3. 几点说明 (6)在定义指针变量时,可以用const修饰。 指向常量的指针:在指针定义语句的类型前加const, 表指针指向的数据为常量。 结论:const int * pi=&a;(或int const * pi=&a;)中,*pi 为常量,pi为变量,故*pi不能为左值。
第5章 指针 5.2 指针变量 3. 几点说明 (6)在定义指针变量时,可以用const修饰。 例如: const int a=78; const int b=28; int c=18; const int * pi=&a; //int const * pi=&a; *pi=58; //错误,*pi为常量 pi=&b; *pi=68; //错误,*pi为常量 pi=&c; *pi=88; //错误,*pi为常量 c=98;
C语言——指针
4. 结论: 若要使变量的值通过函数调用而发生改变, 则形参必须是指针型,实参为地址量(&<变量名>)
或指针型。
另:全局变量和数组名作为参数也可改变变量的值.
总 结
若要使n个变量的值通过函数调用而发生改变,则
在主调函数中设n个变量,用n个指针变量指向它们。 将这些指针变量作为实参,将其地址传递给被调函
p1 p &a p2 &b p1 &b p2 &a
a 5
b 9
a 5 b 9
}
5,9 9,5
三、指针变量作为函数参数 前面讲过:数值型变量作为函数实参 形参数据值的改变不会影响实参。 但当用地址(指针变量)作参数时,作用为传址, 与数组名类似。 要求:形参、实参均为地址量。
单向 传递
形参,于是,
例:实现10.2 swap(int *p1, int *p2) { int temp; temp=p1; p1=p2;p2= temp; } #include <stdio.h> void main( ) { int a, b;
它代表的是地址+1个单位
重要概念: 指针变量也有各种类型(如上面所示),但指针变 量的值只能是整型值。
二、指针变量的引用方式 *指针变量名----表示所指变量的值。 指针变量名----表示所指向变量的指针(地址)。
两个运算符号:
&: 取地址运算符。 &i *: 指针运算符,取其指向的内容(所指变 量的值)。 *p
9,0,10
10,9,0
§10.3 数组与指针
一个变量的地址为该变量的指针。当用一个变 量来存放地址(指针)时,该变量称为指针变量。
一个数组元素相当于一个简单变量。于是,亦 可用一个指针变量来指向数组元素。
《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语言程序设计--第八章
30
8.5 知识拓展
案例8-11 指针的高级应用 [案例任务] 阅读下列程序 ,分析运行结果,了解指 针的各种应用。
程序代码
31
8.5 知识拓展
相关知识:
1.有关指针的数据类型小结 2.案例说明 3.main函数的参数
32
12
8.2 指针变量
[课堂训练8-1] void swap(int *p1,int *p2) { int *t; t=p1; p1=p2; p2=t; }
1.分析下面的程序,写出运行结果。 #include <stdio.h> void main() { void swap(int *p1,int *p2); int *p1,*p2,a=6,b=8; p1=&a; p2=&b; printf(" 交换前:*p1=%d,*p2=%d\n",*p1,*p2); swap(p1,p2); printf(" 交换后:*p1=%d,*p2=%d\n",*p1,*p2); }
17
8.3 指针与数组
案例8-6 [案例任务]
冒泡排序
使用指针指向一维整型数组,使用冒泡排 序法对数组元素从小到大排序并输出。
程序代码
18
8.3 指针与数组
相关知识: 1.冒泡排序法 2.指针变量的其他运算
19
8.3 指针与数组
案例8-7 [案例任务]
逆置一维数组
使用数组名或指针变量作为函数形参与实 参,完成一维数组元素的逆置。请分析程 序运行结果,并对两个方法进行比较。
6
8.2 指针变量
案例8-2 用指针交换两整数 案例8-3 用指针比较两数大小 案例8-4 用指针参数交换两整数
C语言--指针
值传递
运行结果:5, 9
27
例 将数从大到小输出 swap(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } main() COPY { int a,b; int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b); pointer_1=&a; pointer_2=&b; if(a<b)swap(pointer_1,pointer_2); printf("\n%d,%d\n",a,b); }
19
初始:
a p
?
3 :
0x2000
?
执行:*p=a
a
3 : 3
0x2000
p
?
?
20
初始:
a p
?
3 :
0x2000
?
执行:p=&a
a
3 :
0x2000
p
0X2000
21
指针变量作为函数参数
当指针变量作为函数参数时,传递的是变量的地址。读 以下程序: void testpoint(int *p) { int t; t=*p; t++; } void main() { int a=3,* p; p=&a; printf(“a=%d\n”,a); testpoint(p); printf(“a=%d\n”,a); }
22
t
3 :
0x6000
p
&amp;a
指针算术运算
使用递增/递减运算符(++ 和 --)将指针递增或 内存 递减
《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。
第9章 指针
第9章指针指针是C语言的精华,指针让C语言威力无穷,魅力四射。
为什么scanf函数的实参有时要加一个&操作符,有时却不加?为什么数组作为参数时就可以改变实参的值?这些前面遗留的问题都与指针有关,这些问题的答案均可在本章中找到。
指针是C语言中特殊的数据类型。
整型变量所标识的存储单元中存放整数,浮点型变量中存放浮点数,那么指针变量所标识的存储单元中存放的显然是指针,但是指针是什么呢?9.1 指针类型9.1.1 变量的左值和右值变量用于标识存储单元。
计算机中的内存以字节为单位编号。
编号多为32位的二进制数,从0号开始,即0x0000 0000、0x0000 0001、……、0xffff ffff。
计算机中只用内存编号(又称内存地址)标识内存单元。
如果定义并初始化了一个整型变量如int i = 5;,则计算机中的内存状态可能如图9-1所示。
图9-1 变量i的内存状态图从图9-1可知,整型变量i所标识的存储单元共4个字节,通常以存储单元的首字节地址作为该存储单元的地址,即整型变量i所标识的存储单元的地址为0x0012 ff00,类型为整型。
当取变量i的值时,计算机会把从0x0012 ff00处开始的4个字节作为一个整体,取出其中的内容,然后按整型解码最终得到变量i的值为5。
存储单元如宿舍,其地址像宿舍号(如408),其存储的内容如住宿者(如王五),相关变量名如宿舍的雅称(如liaozhai)。
由以上分析可知,变量既标识存储单元的地址又标识其存储的内容,因此变量比如整型变量i也有两个值。
整型变量i的一个值是地址0x0012 ff00,另一个值是内容5。
变量i在使用时表现为何值呢?例9-1分析语句i = 5; j = i;中整型变量i的值。
分析:语句i = 5;的操作结果是把5放入变量i所标识的存储单元中,也就是把5的补码存入地址为0x0012 ff00的存储单元中,变量i的值此时实为地址0x0012 ff00。
第七章 指针
指针
华厦职业学院
C语言程序设计
在这一章中将介绍C语言程序的指针,指针是 一内存中的地址,任何一个变量在内存中都有一个 空间,这个空间有一个地址,这个地址就是变量的 指针,通过指针可以实现对内存的直接访问。
华厦职业学院
C语言程序设计
8.1 8.2 8.3 8.4 8.5 8.6 8.7
指针概述 指针与函数参数 指针与数组 数组与函数参数 字符串与指针 指针与二维数组 动态数组
华厦职业学院
C语言程序设计
指针变量的赋值
指针变量是一个可以存储指针值的变量,在32位系 统中它占4个字节,可以把一个变量用&取地址后赋 值给这个指针变量,例如:
int a=1,*p; p=&a; 此时p存储了变量a的地址。注意变量p本身也是一个变量, 它自己也有一个存储单元,这个存储单元显然与变量a的 存储单元是不同的,变量a的存储单元存储的是变量a的值, 而变量p存储单元存储的是变量a单元的地址,如图7-3所 示。
华厦职业学院
C语言程序设计
通过指针访问变量
既然指针变量指向一个变量,因此通过指针变 量也就知道变量的位置,知道位置也就能访问到变 量,可以通过指针变量存取变量的值。
华厦职业学院
C语言程序设计
C中规定通过:
*指针变量 来访问对应变量的值,例如: • int a=1,b,*p; • p=&a; • *p=2; // 设置p指向的变量的值为2,既a=2 • b=*p; // 把p指向的变量的值赋予b,既b=2 在C语言中,系统对“*指针变量”的解释是根据指 针变量的类型计算出对应变量所占字节数,之后把指针变 量所指的连续的几个字节的二进制数据看成是与指针变量 同类型的数据并存取这一include <stdio.h> void fun(int *p,int b) { printf("fun中: p=%p *p=%d &b=%p b=%d\n",p,*p,&b,b); *p=100; b=100; } void main() { int a=1,b=2,*p; p=&a; printf("调用前: p=%p a=%d &b=%p b=%d\n",p,a,&b,b); fun(p,b); printf("调用前: p=%p a=%d &b=%p b=%d\n",p,a,&b,b); }
C语言程序设计(第3版)何钦铭-颜-晖-第8章--指针
第8章指针【练习8-1】如果有定义”int m, n = 5, *p = &m;”与m = n等价的语句是B 。
A.m = *p; B. *p = *&n; C. m = &n; D. m = **p;解答:A:p是指向m的指针变量,所以*p等价于m。
即m=m。
B:&n是n的地址,*&n是n的值,即把n的值赋给p指向的值m。
即m=n。
C:&n是n的地址。
即把n的地址赋给m。
D:**p是指p指向的指针所指向的值,在此无意义。
故选B。
【练习8-2】调用函数求两个数的和与差:计算输入的两个数的和与差,要求自定义一个函数sum_diff(float op1,float op2, float *psum, float *pdiff),其中op1和op2是输入的两个数,*psum 和*pdiff 是计算得出的和与差。
解答:#include<stdio.h>void sum_diff(float op1,float op2,float *psum,float *pdiff);int main(void){float op1,op2,sum,diff;printf("Input op1 and op2: ");scanf("%f%f",&op1,&op2);sum_diff(op1,op2,&sum,&diff);printf("%f+%f=%f;%f-%f=%f \n",op1,op2,sum,op1,op2,diff);return 0;}void sum_diff(float op1,float op2,float *psum,float *pdiff){*psum=op1+op2;*pdiff=op1-op2;}【练习8-3】两个相同类型的指针变量能不能相加?为什么?解答:不能。
《C语言》指针--ppt课件全文
说明: 这种方法可能会破坏系统的正常
工作状态,因为temp是一个指针变量 b 59
但是在函数中并没有给temp一个确定 的地址,这样它所指向的内存单元是 不可预见的,而对*temp的赋值可能 带来危害
swap2 &a p1
&b p2 随机值 temp
5?
ppt课件
11
例 6. 3 ③ #include <stdio.h> void swap3( int *p1, int *p2) { int *p;
p
*p = 12 ; printf (“%d\n” , *p ) ;
对a 重新赋值 等价于 a=12
2. & 与*
p =ห้องสมุดไป่ตู้&a ;
1010 152 a
&*p &(*p) &a *&a *(&a) *p a
ppt课件
6
3. *与 ++ , - -
int a = 2 , b = 5 , c , d , *p ; (1) p = &a ;
② 形参表列: 即指针变量所指向的函数的形参表列 ③ 格式中的小括号不能省略 2. 应用 (1) 让指针变量指向函数 pt = add ; 因为函数名为函数的入口地址, 所以直接将函数名 赋给指针变量即可 (2) 使用指针变量调用函数 格式 : (*指针变量名) ( 实参表列)
ppt课件
17
例 求一维数组中全部元素的和
因此我们可以定义一个指针变量, 让它的值等于 函数的入口地址, 然后可以通过这个指针变量来调用 函数, 该指针变量称为指向函数的指针变量
ppt课件
16
指向函数的指针变量
C语言程序设计第07章 指针
8
10/7/2013
内存地址
内存单元
1000 1001 1002 1003 1004
1004
12
图 一个变量指向另一个变量
9
10/7/2013
1、两个概念:变量指针与指针变量
变量指针:一个变量的地址 指针变量:专门存放变量地址的变量
指针 变量的地址
…...
2000
2001 2002 2003 2004 2005
k的 地址 2005
2004
…...
5
8.7
…...
…...
i
k
float k;
编译或函数调用时为变量分配内存单元 变量是对程序中数据 存储空间的抽象
4
程序中:i = 5; k = 8.7;
…...
10/7/2013
7.1.1 指针的概念
理解变量的地址和变量的值
变量名
00000000H 00000001H
C语言程序设计教学课件
第7章
指针
7.0 目标 理解指针的概念 定义指针变量 掌握对指针的操作 理解指针和数组的楼
存储地址
内存
0
…...
存储 单元
601
501
602 502
2000 2001
50
2002 注意:内存单元的地址与内存单元中的数据是 401 402 两个完全不同的概念。 2003 存储单元有
存放变量的内存 单 元 ,int 型 为 两 个 字节。
6
a
变量的值(a=6)
int a; a = 6;
变量的 地址
变量存储在内存某个单元中; 不同类型变量所占内存空间大小不一定相同; 不同编译环境,同一类型变量占用空间大小可能不同
C语言程序设计(第二版)-电子教案-丁亚涛-8587 第8章 指针
8.5.3 指针与二维数组
• 二维数组其实可以看成由一维数组构造而成。就相当于 几个队列构成一个方阵,方阵由队列组成,队列由具体 的元素--人组成。
• 一级指针只能管理队列,如果管理方阵,则需要二级指 针。
•int a=1000,*pa,**ppa; • pa=&a; • ppa=&pa;
• *(*(ppa)) ≡ *(pa) ≡ a ≡ 1000
• p是二级指针 • *p相当于*(p+0),级别降低为一级指针,相当于p[0] • **p相当于*(*(p+0)+0),级别降低为数组元素(普通变量),
也相当于p[0][0]
• p[1][2],相当于*(*(p+1)+2) • &p[1][2], 级别提升为一级指针,相当于:
• p[1]+2,*(p+1)+2 • &p[1],级别提升为二级指针,相当于:
f=f4; printf("a/b=%d\n",f(a,b));
8.5 指针与数组
• 8.5.1 指针与字符数组 • char str[100]= "Hello World"; • char *p=str; • 字符w可以有如下多种表示形式: • str[6] • *(str+6) • p[6] • *(p+6)
【例8-2】演示指针和数组的关系。
#include <stdio.h>
接可存取,由于p中存储的是x的信息。访问p可以获取x的信 息,再对银行存款进行操作。
8.1 借钱的故事
8.2 指针的概念
• C语言允许使用变量名、数组名[下标]、函数名等标 识符来访问内存
C语言程序设计第八章 指针的使用
第八章指针的使用【学习目标】本章将详细介绍在C语言中如何使用指针。
学习要点包括如下几点:(1)掌握指针和指针变量的概念,了解指针变量的特点以及直接访问数据和间接访问数据的原理。
(2)掌握指针变量的定义、赋值方法及指针运算符的使用,熟练运用指针访问简单变量。
(3)熟悉指针和一维数组的关系,掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素。
(4)了解指针与字符串的关系,能熟练使用指针处理字符串。
(5)熟练掌握用指针变量作函数的参数时函数的定义和调用方法、数组名作函数的参数用法。
(6)指向指针的指针的运用。
【学习导航】本章的在整个课程中的位置如图5-1所示。
图8-1 本章学习导航在本书的第一章介绍C语言有一个灵活性的特点,那么它的灵活性具体体现在哪里呢?其实就是指针。
指针是C语言的精华部分,通过利用指针,我们能很好地利用内存资源,使其发挥最大的效率。
有了指针技术,我们可以描述复杂的数据结构,对字符串的处理可以更灵活,对数组的处理更方便,使程序的书写简洁,高效。
8.1 地址和指针指针是C语言的一种数据类型,类似于整型、字符型等。
既然指针也是一种类型,那么也可以定义该类型的变量,称为指针变量。
指针变量和其他类型的变量的区别是:指针变量存储的是地址。
所以要学好指针,就一定要明白数据在内存中是如何存储的。
计算机所有数据都是存储在存储器里,系统的内存可看作编了号的小房间,如果要取房间的东西(读取数据)就需要得到房间编号。
地址就是内存区中对每个字节的编号。
下面通过两个整型变量来说明。
整型变量x、y(基本整型需4个字节)在内存中的存储如图8-2所示(假设内存编号是从2000开始)。
把变量所占用的存储单元首字节的地址作为变量的地址。
C语言中利用取地址运算符“&”获取变量的存储地址。
例如,&c将返回c的首地址;&x将返回x的首地址。
2000H2004H2008H2012H...图8-2 变量x和y在内存中的存储图8-2中2000H和2004H就是内存单元的地址。
中国矿业大学(北京)《C语言程序设计》课件第7章指针与数组
a[1] a[2] a[3]
mmaainn(()) {{iinntt aa[[1100] ],,ii;;
ppuuttss((““pplleeaassee iinnppuutt %%dd ssccoorree::””,,N1)0;);
ffoorr ((ii==00;;i<i1<01;0i;++i+) +) ssccaannff(“(%"%d”d,"a?,+i&a[)i;]);
main()
{
int i = 0;
printf("%c%s\n",*a, b + 1);
while (putchar (*(a + i)))
{ i++;
Program
}
printf("i = %d\n",i);
PROGRAM
while ( -- i)
{ putchar (*(b + i));
i=7
} printf("\n%s\n", &b[3]);
1,2,3,3,2,3,4,4
20
读程序-3
#include <stdio.h>
char b[] = "program";
char *a = “PROGRAM”;
/*定义一个指针变量指向字符串,与上边定义的区别是:前者是先申请内存空间, 后存入字符串,而后者是先将字符串存入在内存的某个地方,然后再用a指向 该字符串所在内存的开始位置。另外。b是常量,a是变量*/
–指针变量指向哪儿?
–所指向的变量里存储的数据是多少?
C语言程序设计字符串-指针-字符串指针
C语言程序设计字符串-指针-字符串指针一、单项选择题(50题)1、\、/、mod、*等4个算术运算符中,优先级最低的是________。
A、\B、/C、ModD、*2、若有定义: char str1[10] = "aaaaaaa";char str2[10] = "bbbbb";将字符串str2连接到str1,则下列描述中正确的是________。
A、strcat(str1,str2)可以将字符串str2连接到str1中B、strncat(str1,str2,strlen(str2))可以将字符串str2连接到str1中C、strncat(str1,str2,2)可以将字符串str2的前两个字符连接到str1中D、strncat(str1,str2,4)可以将字符串str2的前四个字符连接到str1中3、从键盘上输入某字符串时,不可使用的函数是()。
A、getchar()B、gets()C、scanf()D、fread()4、字符串 "\\\"abc\"\\" 的长度是______。
A、11B、7C、5D、35、设有以下语句, 若 0<k<4,下列选项中对字符串的非法引用是()。
char str[4][2]={"aaa","bbb","ccc","ddd"},*strp[4];int j;for (j=0;j<4;j++)strp[j]=str[j];A、strpB、str[k]C、strp[k]D、*strp6、以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是________。
A、char s[10]=”abcdefg”;B、char t[]=”abcdefg”,*s=t;C、char s[10];s=”abcdefg”;D、char s[10];strcpy(s,”abcdefg”);7、下列能正确进行字符串赋值的是________。
C语言程序设计 指针
实验6 指针学号:姓名:实验日期:一、实验目的和要求(1)掌握指针的概念、指针变量定义和引用。
(2)掌握指针的运用方法。
(3)掌握数组的指针和指向数组的指针变量。
(4)掌握指针与函数的关系。
(5)能正确使用字符串的指针和指向字符串的指针变量。
(6)了解指向函数的指针。
(7)了解指向指针变量的指针的概念及其使用方法。
二、实验内容(注意:由于本实验报告模板中已经有题目内容,故源代码中无需再附上教材上的题目编号信息,只需有你的学号和姓名信息即可。
以下所有题目都要求代码与运行结果一起截图,只有在代码实在过多无法一起截图情况下,才能分开截图)1、【编写程序】请用指针编程实现:从键盘输入10个数,求出其中的最小值。
提示:定义函数lookup(int *str,int *a,int n)查找数组str中的最小值,将数组中的每一个数跟第一个数进行比较,最后得到最小的数。
2、【编写程序】请用指针编程实现:编写函数change(char *s,int *p),将字符串s 中的数字字符转换成数字存储到整型数组p中,函数返回转换后的数字的个数。
提示:先检测字符是否为数字,数字的ASCII码值为30H~39H,逐个判断s中的字符,如果是数字字符,则将其转换成数字存储到整型数组中。
3、【编写程序】请用指针编程实现:先读入10个整数,然后把它们按从大到小的次序排列起来,最后再读入一个整数k,并将k插入到该整数数列中,插入后的数列仍然按从大到小的顺序排列。
要求:编写一个函数实现排序功能。
4、【编写程序】请用指针编程实现:从键盘输入一个字符串,判断输入的字符串是否为回文。
(回文是指正序和反序字符排例方式相同的字符串,如abcdcba是回文)。
5、【编写程序】请用指针编程实现:写一个函数,实现两个字符串的比较。
即自己写一个strcmpa函数,函数原型为:int strcmpa(char *p1,char *p2),若两个字符串相等则返回0,否则返回这两个字符串第一个不同字符的ASCII码差值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c语言程序设计--指针
一、地址
1.内存是计算机进行数据运算的物理空间,地址即内存中的指定位置。
2.操作符“&”作用于变量,找到地址。
操作符“*”作用于地址,取得该地址内存中存储的变量。
二、地址应用
1.变量地址做函数参数
void fun1(int *a)
{
函数体;
}
int main()
{
int a=5;
fun1(&a);
return 0;
}
2.数组做函数参数
void fun1(int a[])
{
函数体;
}
int main()
{
int a[5]={5,4,3,21,7};
fun1(a);
return 0;
}
三、指针
1.指针是存放变量地址的变量
2.声明格式:类型说明符*标识符;
3.指针可以指向变量、常量、数组、字符串、结构体、函数。
4.指针需要初始化
例:int *a;
int num=5;
a=#
5.指针指向同一变量时可以进行比较运算,例如当两个指针指向同一数组时,比较运算表示比较两个指针在数组中位置的大小。
两个指针相等表示他们指向数组中的同一个元素。
6.指针和整数进行加减运算,编译器会根据所指对象的数据长度对该整数进行放大,char的放大因子为1,int和short的放大因子为2,long和float的放大因子为4,double的放大因子为8。
7.当两个指针指向同一变量时,他们可以进行减运算。
例如,当两个
指针指向同一个数组时,他们的差是两个指针之间元素的个数。
相减的结果遵守对象类型的字节长度的缩减规则。
8.指向数组的指针
数组在内存空间中的存储是连续的,数组名表示数组的第一个元素的地址。