C语言指针

这个作业属于哪个班级 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(字符数组) 从键盘输入一以回车结束的字符串放入字符数组中, 并自动加''
scanf() scanf("%s", 字符数组) 从键盘输入一以空格或回车结束的字符串放入字符数 组中,并自动加''

·字符串输出函数:

函数 格式 功能
puts() puts(字符串地址) 向显示器输出字符串(输出完,换行)
printf() printf("%s", 字符串地址) 依次输出字符串中的每个字符直到遇到字符''(''不会被输出)

·字符串常用函数:

函数 格式 功能
strlen() strlen(字符串地址) 计算字符串长度,返回字符串实际长度,不包括''在内
strcpy () strcpy (字符数组1,字符串2) 将字符串2拷贝到字符数组1中去,返回字符数组1的首地址
strncpy () strncpy (字符数组1, 字符串2, 长度n) 将字符串1前n个字符的子串与字符串2前n个字符的子串进行比较
strcmp () strcmp (字符串1, 字符串2) 比较两个字符串,对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或''为止
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分)

选择说反话-加强版这题介绍字符指针操作如何操作字符串。并说明和超星视频做法区别。

2.3.1 伪代码

2.3.2 代码截图

2.3.3 请说明和超星视频做法区别,各自优缺点。

原文地址:https://www.cnblogs.com/jioky/p/14199224.html