开始学习数据结构了,今天学习了一些动态分配空间的知识,malloc函数,并了解了它的各种使用情况,还有回收函数free,在指针回收的时候为了避免野指针,需要将指针指向NULL....等等。下面是脑图:
day1作业
因为是多文件编辑我将2个题的头文件和函数文件都写在了一起
第一题的main函数:
#include "head.h"
int main(int argc, const char *argv[])
{
int n;
printf("请输入字符串的长度\n");
scanf("%d",&n);
getchar();
char *p = spaceChar(n);
printf("输入字符串各个值\n");
MyinputChar(p,n);
Myprint(p);
printf("逆置后的结果是\n");
Nizhi(p);
free(p);
p = NULL;
return 0;
}
第二题的main函数:
#include "head.h"
int main(int argc, const char *argv[])
{
int n,m;
printf("请输入要分配的空间大小\n");
scanf("%d %d",&n,&m);
int *p = spaceInt(n);
int *key = spaceInt(m);
printf("请输入%d个整形数\n",n);
MyinputInt(p,n);
printf("请输入%d个整形数\n",m);
MyinputInt(key,m);
printf("检查是否存在\n");
Check(p,key,n);
free(p);
free(key);
p == NULL;
key == NULL;
return 0;
}
head头文件:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int *spaceInt(int n);
char *spaceChar(int n);
void MyinputChar(char *p,int n);
void MyinputInt(int *p,int n);
void Myprint(char *p);
void Nizhi(char *p);
void Check(int *p,int *key,int n);
函数文件:
#include "head.h"
int *spaceInt(int n){
int *p = (int *)malloc(sizeof(int)*n);
if(p == NULL){
return NULL;
}
return p;
}
char *spaceChar(int n){
char *p = (char *)malloc(sizeof(char)*n);
if(p == NULL){
return NULL;
}
return p;
}
void MyinputChar(char *p,int n){
for(int i = 0 ; i < n; i ++){
if(i == n - 1){
*(p+i) = '\0';
break;
}
scanf("%c",p+i);
getchar();
}
}
void MyinputInt(int *p,int n){
for(int i = 0 ; i < n; i ++){
scanf("%d",p+i);
getchar();
}
}
void Myprint(char *p){
int n = 0;
while(*(p+n)){
printf("%c",*(p+n));
n++;
}
printf("\n");
}
void Nizhi(char *p){
int right = strlen(p) - 1;
int left = 0;
while(left < right){
char a = *(p+left);
*(p+left) = *(p+right);
*(p+right) = a;
left ++;
right --;
}
puts(p);
}
void Check(int *p,int *key,int n){
for(int i = 0; i < n; i ++){
if(*key == *(p+i)){
printf("存在\n");
return;
}
}
printf("不存在\n");
}
第一题结果:
第二题结果: