一、定义一个"简单宏"或宏函数,实现两个数交换。
代码:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#define EXCHGE(x,y) do{int t=x;x=y;y=t;}while(0) // 无需返回使用do while
#define EXCHANGE int t=c;c=d;d=t; //直接代换 需与主函数变量名一致
int main(int argc, const char *argv[])
{
int a=11,b=22;
EXCHGE(a,b);
printf("a=%d,b=%d\n",a,b);
int c=33,d=44;
EXCHANGE
printf("c=%d,d=%d\n",c,d);
return 0;
}
运行:
二、定义字符类型指针,指针指向n个连续堆区内存,输入,计算字符串长度
定义函数,实现内存申请;
定义函数,计算字符串长度;
定义函数释放内存。
代码:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
char *creat_e(int n);
int len_g(char *p);
char *fre_es(char *p);
int main(int argc, const char *argv[])
{
int n;
printf("please enter n:\n");
scanf("%d",&n);
char *p=creat_e(n); //定义函数申请堆区内存,返回地址使用p接收
printf("please enter str:\n");
scanf("%s",p);
int len=len_g(p); //定义函数计算输入字符串的长度,返回长度用len接收
printf("strlen=%d\n",len);
p=fre_es(p); //定义函数释放内存并返回地址NULL让p指向NULL
return 0;
}
char *creat_e(int n) //需要传参n确定申请多少内存 返回内存首地址
{
char *p=(char *)malloc(sizeof(char)*n);
return p;
}
int len_g(char *p) //字符串只需要传参首地址 即可计算长度 返回长度
{
int len=strlen(p);
return len;
}
char *fre_es(char *p) //释放内存需要传递首地址,返回NULL
{
if(NULL==p) //可能申请失败 失败时指向malloc返回NULL 此时不需要再重置了
return NULL;
free(p); //free释放堆区p指向地址的内存
p=NULL; //让自定义函数中的指针变量p指向NULL
return p; //返回NULL给主函数的指针变量p接收 使它也指向NULL
}
运行:
思维导图: