C博客作业05-指针

这个作业属于哪个班级 C语言--网络2011/2012
这个作业的地址 C博客作业05-指针
这个作业的目标 学习指针相关内容
姓名 邓宏
0.展示PTA总分(0----2)
展示关于“指针题目集”分数截图。

1.本章学习总结(3分)

1.1 指针定义、指针相关运算、指针做函数参数。

1.1.1指针与指针变量的概念。

(1)指针:就是内存中的一个存储单元的地址,即内存单元的编号。
(2)指针变量:是一个能存放地址值的变量。通过它存放的地址值能间接访问它所指向的变量。

1.1.2指针变量的定义。

类型名  指针变量名类型说明中可取C语言的有效类型, 表示为指针型变量。如:char  c1,c2; 表示c1与c2是指针变量,其基类型是字符型。注意:指针的基类型与其所指向的变量的类型要统一。

1.2 字符指针

指针如何指向字符串

将指针指向该字符串的首地址即可。
比如:
char a[] = "abscdf";

字符串函数

strcpy

功能:把一个字符串复制到一个数组中。

strcat

功能:把一个字符串添加到另一字符串结尾处并添加'\0'。
char *p = a; // 将字符串"abscdf"的首地址(即数组名)赋值给指针p
puts(p); // 等价于puts(a)

strlen

功能:计算字符串s的长度

strcmp

功 能: 比较两个串
1.3 指针做函数返回值
具体格式是什么,注意事项。
申明:

void aaa(int *p);

使用:

aaa(p);

函数:

int aaa(int *p)
{

return p;
}

注意事项:
用指针作为函数返回值时需要注意的一点是,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针请尽量不要指向这些数据,C语言没有任何机制来保证这些数据会一直有效,它们在后续使用过程中可能会引发运行时错误
1.4 动态内存分配
举例为多个字符串做动态内存要如何分配。
原因:
1.可以动态的申请空间,以便动态确定对象所需要的内存;
2.便于储存大型对象,通常情况下栈区的大小容不下过于庞大的对象;
3.传递指针比传递整个对象更方便高效;
堆区和栈区区别:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
动态内存分配相关函数及用法:
1、malloc函数
malloc函数的原型为:
void malloc (u igned int size)
1.5 指针数组及其应用
int a[10][5];
int (
p)[5];//每行5个元素的数组指针。
p=a;//把p指向a。
1.6 二级指针
A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量.根据B的不同情况,二级指针又分为指向指针变量的指针和指向数组的指针。
1.7 行指针、列指针
行指针:指的是一整行,不指向具体元素。
列指针:指的是一行中某个具体元素。
可以将列指针理解为行指针的具体元素,行指针理解为列指针的地址。
那么两个概念之间的具体转换是:
*行指针----列指针
&列指针----行指针
a即是它的行指针,a+0表示第0行的地址,a+1表示第1行地址…
或者可以说成&a[0]表示第0行的地址,&a[1]表示第1行的地址…
那么a[0]+0,a[0]+1…就表示第1行第1列的地址,第1行第2列地址…
a[1]+0,a[1]+1就表示第2行第1列地址,第2行第2列地址…

2.PTA实验作业(7分)

2.1 题目名1(2分)

选择一题难度较大的题目。请认真写伪代码整理解题思路。自己代码和同学代码比较,说明各自代码特点。

2.1.1 伪代码

定义一个二维数组str1[4][20],输入诗,注意没有输入的放'\0',或者以指针数组的形式输入
定义一个一维数组str2[10],存放诗的尾
判断每一行诗的长度,将最后两个字符输入到str2中,注意下标要自增,如str2[j++] = str1[i][lens - 2];
最后在str2的末尾放结束标志符
输出str2
2.1.2 代码截图

2.1.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。

差别:同学使用动态分配,节省空间
2.2 题目名2(2分)
选择合并2个有序数组这题介绍做法。
2.2.1 伪代码
定义 i=m-1;
定义 j=n-1;
定义 k=m+n-1;
while(j>=0且i>=0)
{
如果(a[i]>=b[j])那么将a[i]赋值到从a数组最后一位依次往前赋值;
否则 将b[j]赋值到从a数组头一位依次往后赋值;
}
当(j>=0)时 a[k--]=b[j--];将b组未赋值完的值依次排列
2.2.2 代码截图

2.2.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。
展示同学代码,介绍做法具体区别。

同学:利用二级指针,符合所学知识,但相对没那么精简
2.3 题目名3(3分)
选择说反话-加强版这题介绍字符指针操作如何操作字符串。并说明和超星视频做法区别。

2.3.1 伪代码
定义str[500000]
输入并排除多余空格
从后往前依次输出
2.3.2 代码截图


2.3.3 请说明和超星视频做法区别,各自优缺点。
超星视频代码更精简,运用指针,同时运用printf("%.s",len,p);的新语法,省去了删空格的步骤

posted @ 2020-12-27 20:05  年少不知头发贵  阅读(77)  评论(0编辑  收藏  举报