C博客作业05--指针
| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业05--指针 |
| 这个作业的目标 | 学习指针相关内容 |
| 姓名 | 宋宇龙 |
0.展示PTA总分(0----2)
1.本章学习总结(3分)
1.1 指针定义、指针相关运算、指针做函数参数。
指针定义:
int *p;float *fp;char *cp;
指针相关运算:
int p,a=3;
p=&a; //&取地址运算符
(1)&:表示取地址:表示取内容
(2)&p与&a相同,是地址
指针做函数参数:
void swap2(int px,int *py)
{
.......
}
调用: swap2(&a,&b);
1.2 字符指针
指针如何指向字符串:
char sa[]="array";
const char* sp="point";
printf("%s",sa); array
printf("%s",sp); point
printf("%s\n","string"); string
printf("%s",sa+2); ray
printf("%s",sp+3); nt
printf("%s\n","string"+1); tring
总结:数组名sa、指针sp、字符串"string"的值都是地址
printf("%s",地址);
字符串相关函数:
string.h
字符串复制:strcpy(str1,str2);
解决溢出问题:strncpy(str1,str2,n);//最多复制n个字符
字符串连接:strcat(str1,str2);
解决溢出问题:strncat(str1,str2,n);//最多追加n个字符到str1
字符串比较:strcmp(str1,str2);
if(strcmp(str1,str2)>0){} //比较字符串的内容
if(strcmp(str1,str2)>0)
if(strcmp(str1,str2)<0)
if(strcmp(str1,str2)=0)
strcmp(str1,str2) //比较字符串的大小
从首项开始比较ASCII码,若相等继续向后比较,若str1大于str2则返回1,等于返回0,小于返回-1
求字符串长度:strlen(str);
计算字符串的有效长度,不包括'\0'
strbrk(str1,str2) 检索字符串str1中第一个匹配字符串str2中字符的字符
strrchr(str,c) 参数str所指向的字符串中搜索左后一次出现字符c的位置
strstr(str1,str2)字符串str1中查找第一次出现字符串str2的位置
type.h
islower() 如果c有相对应的小写字母,则该函数返回c的小写字母,否则c保持不变///???
toupper() 如果c有相对应的大写字母,则该函数返回c的大写字母,否则c保持不变
//将字符串中的所有大写所有大写字符转换成小写字符
include <stdio.h>
include <string.h>
include <ctype.h>
int main() {
char input[] = "JOUrnalDev";
char output[256];
// Get the input size
int size = strlen(input);
for (int i=0; i<size; i++)
// Store the upper case letters to output[i]
output[i] = toupper(input[i]);
printf("Input: %s\n", input);
printf("Output: %s", output);
return 0;
}
//Input: JOUrnalDev
//Output: JOURNALDEV
isdigit() 检测是否是十进制数字字符,如果是返回非零值,否则返回0
stdlib.h
atoi():(该函数返回转换后的长整数,如果没有执行有效的转换,则返回零)
1.3 指针做函数返回值
char* p;
return p;
1.4 动态内存分配
stdlib.h
int* p;
p=(int)calloc(n,sizeof(int))在堆中分配n个连续空间,每一储存空间的长度为sizeof(int),并全部初始化为0
p=(int)calloc(n,sizeof(int))分配一连续空间,不初始化
free(p) 当某个动态储存空间不在用时,及时释放
1.5 指针数组及其应用
double ,a[2],p,q;
p=&a[0];
q=p+1;
printf("%d",q-p); 指针p和q之间的元素个数
printf("%d",(int)q-(int)p); 指针p和q之间的字节数 (int)q为地址值
1.6 二级指针
a[3][3]
a[i]表示一维数组,每行地址第一个元素地址
二维数组名a表示指向第一行地址的地址,所以是二维地址
a:二级指针,指向a[0]
a+i 指a[i],二级指针
*(a+i) 即a[i],表示第i行首元素地址,是一级指针
*(a+i)+j 即a[i]+j=&a[i][j],第i行第j个元素的地址,一级地址
**(a+i)即a[i][0]
((a+i)+j)即a[i][j]
a+i+j 第i+j行二级地址
二维数组名a,int** p;
a+i 二级地址
a[i] 一级地址
(a+i)=a[i]
一级地址运算后就是内容
1.7 行指针、列指针
行指针:
形式:int (p)[n]
含义:p为指向含n个元素的一维数组的指针变量,二级指针
a[i][j]=((p+i)+j)=((p+i))[j]=p[i][j]
eg.(*(p+1))[0]=a[1][0]
列指针:
int a[2][3]
形式:int* p;p=a[0]
*(p+i)表示离a[0][0]第i个位置的元素
2.PTA实验作业(7分)
2.1 题目名1(2分)
6-9 合并两个有序数组(2) (15分)
2.1.1 伪代码
2.1.2 代码截图
2.1.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点
我写的代码虽然看起来段,但运算量大
同学写的代码运算时间短
2.2 题目名2(2分)
7-5 删除字符串中的子串 (20分)
2.2.1 伪代码
2.2.2 代码截图
2.2.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。
我写的代码太长了,没有用新学的函数strstr()
2.3 题目名3(3分)
选择说反话-加强版这题介绍字符指针操作如何操作字符串。并说明和超星视频做法区别。
2.3.1 伪代码
2.3.2 代码截图
自己写的
网上的
2.3.3 请说明和超星视频做法区别,各自优缺点。
就挺好!