|这个作业属于哪个班级|C语言--网络2011/2012|
|----|----|----|
|这个作业的地址|C博客作业05--指针|
|这个作业的目标|学习指针相关内容|
|姓名| 郑俊佳|
0.展示PTA总分(0----2)
展示关于“指针题目集”分数截图。
1.本章学习总结(3分)
整理指针主要知识点,必须包含内容有:
1.1 指针定义、指针相关运算、指针做函数参数。
每个知识点具体展开介绍。
1.1.1指针定义
·类型 *变量名;
·eg:int *p;
*只有变量名前带有‘ 星号’才说明其为指针变量 *
·eg:
int *p, *s; //ture
int *p,s;==int a;int *p; //error
*在前面已经定义过的指针变量,使用时不能再加‘ 星号’ *
·eg:
int *p,a; *p=&a; //error
int *p,a;p=&a; //ture
**变量定义类型不一致,无法取地址 **
**相同类型的指针变量可以相互赋值 **
·eg:int *p, *t,a;p=&a;t=p;
//p与t,皆指向a;
1.1.2指针相关运算
char *p;
int i=1;
p=&i;
p++;//指i的地址加一
( *p)++;//指i的值加一
·p+t;//一个指针变量加or减一个整数是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加或相减。这样就保证了p+t指向p下面的第t个元素。
指针变量相减:
如果两个指针变量指向同一个数组的元素,则两个指针变量之差是两个指针之间的元素个数。
**指针变量相加无实际意义 **
指针变量比较:
如果两个指针变量指向同一个数组的元素,则可以进行比较。指向前面元素的指针变量小于指向后面元素的指针变量。
1.2 字符指针
包括指针如何指向字符串、字符串相关函数及函数代码原型的理解、字符串相关函数用法(扩展课堂未介绍内容)
指向字符串
char *p="Hello World!";
字符串相关函数及函数代码原型
·字符串输入函数:
函数 | 格式 | 功能 |
---|---|---|
gets() | gets(字符数组) | 从键盘输入一以回车结束的字符串放入字符数组中, 并自动加'\0' |
scanf() | scanf("%s", 字符数组) | 从键盘输入一以空格或回车结束的字符串放入字符数 组中,并自动加'\0' |
·字符串输出函数:
函数 | 格式 | 功能 |
---|---|---|
puts() | puts(字符串地址) | 向显示器输出字符串(输出完,换行) |
printf() | printf("%s", 字符串地址) | 依次输出字符串中的每个字符直到遇到字符'\0'('\0'不会被输出) |
·字符串常用函数:
函数 | 格式 | 功能 |
---|---|---|
strlen() | strlen(字符串地址) | 计算字符串长度,返回字符串实际长度,不包括'\0'在内 |
strcpy () | strcpy (字符数组1,字符串2) | 将字符串2拷贝到字符数组1中去,返回字符数组1的首地址 |
strncpy () | strncpy (字符数组1, 字符串2, 长度n) | 将字符串1前n个字符的子串与字符串2前n个字符的子串进行比较 |
strcmp () | strcmp (字符串1, 字符串2) | 比较两个字符串,对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或'\0'为止 |
stricmp() | stricmp(字符串1, 字符串2) | 同strcmp,stricmp在比较两个字符串时不区分大小写,而strcmp则区分大小写 |
strncmp () | strncmp (字符串1, 字符串2, 长度n) | 将字符串1前n个字符的子串与字符串2前n个字符的子串进行比较 |
- ·扩展:
* strstr(str1,str2)
- ·str1: 被查找目标 string expression to search.
- ·str2: 要查找对象 The string expression to find.
- ·返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
1.3 指针做函数返回值
具体格式是什么,注意事项。
1.4 动态内存分配
为什么要动态内存分配,堆区和栈区区别。动态内存分配相关函数及用法。举例为多个字符串做动态内存要如何分配。
1.5 指针数组及其应用
多个字符串用二维数组表示和用指针数组表示区别?
1.6 二级指针
- ·指针可以指向一份普通类型的数据,例如
int、double、char
等,也可以指向一份指针类型的数据,例如int *、double *、char *
等。 - ·如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。
·eg:int a =100;
int *p1 = &a;
int * *p2 = &p1;
·指针变量也是一种变量,也会占用存储空间,也可以使用&获取它的地址。C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个’星号‘。p1 是一级指针,指向普通类型的数据,定义时有一个 ’星号‘;p2 是二级指针,指向一级指针 p1,定义时有两个 ‘星号’
1.7 行指针、列指针
行指针:指向某一行,不指向具体的元素。
列指针:指向行中具体的元素。
列指针只要在同一行,不管它们指向行中的哪个元素,它们的行地址都是在同一行的地址,所以它们的行地址都是一样的。
&列指针->行指针:
*行指针->列指针:
·对于元素a[1][2],其地址用列指针表示为a[1]+2,等价表示为 *(a+1)+2
,那么内容是 *( *(a+1)+2)
;
对于数组a[3][4],可以这样声明(并初始化)行指针:
int ( *ptr)[4]=a;
//注意行指针是一行中所有元素所共有的,所以应该等于列数
声明和初始化列指针时,要注意“ 星号”如:
int *ptr= *a;//true
int *ptr=a; //error
2.PTA实验作业(7分)
2.1 字符串反正序连接(2分)
选择一题难度较大的题目。请认真写伪代码整理解题思路。自己代码和同学代码比较,说明各自代码特点。
2.1.1 伪代码
用代码渲染符号```渲染伪代码。注意:伪代码不是翻译代码,必须是代码+中文文字描述。
数据处理可以用C语言符号介绍。具体参考看课件!!!
2.1.2 代码截图
贴图展示代码,不要复制。
2.1.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。
2.2 合并两个有序数组(2分)
选择合并2个有序数组这题介绍做法。
2.2.1 伪代码
2.2.2 代码截图
2.2.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。
展示同学代码,介绍做法具体区别。
2.3 说反话-加强版(3分)
选择说反话-加强版这题介绍字符指针操作如何操作字符串。并说明和超星视频做法区别。