作业1:在堆区分配字符型连续的n个空间
1、调用动态函数申请空间
2、调用循环输入n字符
3、调用函数实现字符穿串逆置
4、释放空间
main函数:
1 #include"head.h"
2 int main(int argc, const char *argv[])
3 {
4 char *p=Space(); //调用函数动态申请空间
5 Input(p,5); //调用函数输入n字符
6 // for(int i=0;i<;i++) //判断是否成功输入
7 // {
8 // printf("%c",*(p+i));
9 // }
10 Reverse(p,5); //字符串逆置
11 puts(p); //判断是否实现字符串逆置
12 Free(p); //利用函数释放空间
13 puts(p);
14
15 return 0;
16 }
head函数:
1
2 #ifndef __HEAD_H__
3 #define __HEAD_H__
4
5 #include<stdio.h>
6 char *Space();
7
8 void Input(char *p,int n);
9
10 void Reverse(char *p,int n);
11
12 void Free(char *p);
13
14
15
16 #endif
test函数
1 #include<stdlib.h>
2 #include<stdio.h>
3 char *Space()
4
5 {
6 char *p=(char *)malloc(sizeof(char)*5);
7 if(p==NULL)
8 {
9 return NULL;
10 }
11 return p;
12 }
13 void Input(char *p,int n)
14 {
15 for(int i=0;i<n;i++)
16 {
17 scanf("%c",p+i);
18 }
19 // puts(p);//判断是是否成功输入
20 }
21 void Reverse(char *p,int n)
22 {
23 char t;
24 for(int i=0,j=n-1;i!=j;i++,j--)
25 {
26 t=*(p+i);*(p+i)=*(p+j);*(p+j)=t;
27 }
28 }
29 void Free(char *p)
30 {
31 if(p==NULL)
32 {
33 return;
34 }
35 free(p);
36 }
~
运行结果
ubuntu@ubuntu:1月29日$ ./a.out
asdasdsdg
sadsa
作业2:在堆区分配n个连续的整形空间,使用指针变量p指向,在堆区分配单个整数空间,使用指针变量key指向
1:调用函数动态申请空间
2:调用函数循环输入n整数,key的值
3:计算key在p中是否存在,存在提示存在,否则不存在
4:释放空间p和key
代码段:
头文件
1 #ifndef __HEAD1_H__
2 #define __HEAD1_H__
3 #include<stdio.h>
4 #include<stdlib.h>
5 int *Space(int n);
6 int *SpaceKey();
7
8 void Input(int *p,int n);
9 void InputKey(int *key);
10
11 void PanDuan(int *p,int n,int *key);
12
13 void Free(int *p);
14
15 #endif
test.c
1 #include<stdio.h>
2 #include<stdlib.h>
3 int *Space(int n)
4 {
5 int *p=(int *)malloc(sizeof(int)*6);
6 if(p==NULL)
7 {
8 return NULL;
9 }
10 return p;
11 }
12 int *SpaceKey()
13 {
14 int *key=(int *)malloc(sizeof(int));
15 if(key==NULL)
16 {
17 return NULL;
18 }
19 return key;
20 }
21 void Input(int *p,int n)
22 {
23 for(int i=0;i<n;i++)
24 {
25 scanf("%d",p+i);
26 }
27 }
28 void InputKey(int *key)
29 {
30 scanf("%d",key);
31 }
32 void PanDuan(int *p,int n,int *key)
33 {
34 int i=0;
35 for(;i<n;i++)
36 {
37 if(*(p+i)==*key)
38 {
39 printf("存在\n");
40 return;
41 }
42
43 }
44 if(i=n)
45 {
46 printf("不存在\n");
47 }
48 }
49 void Free(int *p)
50 {
51 if(p==NULL)
52 {
53 return;
54 }
55 free(p);
56 }
main
1
2
3 #include"head1.h"
4 int main(int argc, const char *argv[])
5 {
6 int n;
7 printf("输入p指向的整数个数:");
8 scanf("%d",&n);
9 int *p=Space(n);
10 int *key=SpaceKey();
11 printf("%p\n%p\n",p,key);
12 printf("输入p指向的地址的值:");
13 Input(p,n);
14 printf("输入key指向的地址的值:");
15 InputKey(key);
16 printf("p指向地址的值为:");
17 for(int i=0;i<n;i++)
18 {
19 printf("%d\t",*(p+i));
20 }
21 printf("\nkey指向的地址的值为:");
22 printf("%d\n",*key);
23 PanDuan(p,n,key);
24 Free(p);
25 free(key);
26 printf("%d\n%d\n",*p,*key);
27 return 0;
28 }
29
输入结果
ubuntu@ubuntu:1月29日$ gcc main1.c test1.c
\ubuntu@ubuntu:1月29日$ ./a.out
输入p指向的整数个数:5
0x5601e3922a80
0x5601e3922aa0
输入p指向的地址的值:3
5
4
3
2
输入key指向的地址的值:5
p指向地址的值为:3 5 4 3 2
key指向的地址的值为:5
存在
0
-476960128
ubuntu@ubuntu:1月29日$ ./a.out
输入p指向的整数个数:4
0x560a8f5f9a80
0x560a8f5f9aa0
输入p指向的地址的值:3
4
5
6
输入key指向的地址的值:2
p指向地址的值为:3 4 5 6
key指向的地址的值为:2
不存在
0
-1889559936
ps:输入key可以把改成Space(n)中的n定1,后续判断存在时判断条件为*(p+i)==*key
若key中有多个元素,可以遍历判断。