目录
一、思维导图(指针)
1、指针可以根据用户需求,分配实际空间的大小,不会发生空间浪费
2、指针可以指向任何一种类型的地址,指向任何一个空间,可以使代码看起来更简洁,运行速度快
· 指针:把每个字节的编号称为地址,地址也就是指针。
· 指针变量:存储地址的,称为指针变量。
二、作业
2.1 使用指针实现字符串拷贝
函数:void MyStrcpy(char *p,char *q)
#include <stdio.h>
#include <string.h>
void MyStrcpy(char *p,char*q,int n)
{
char i;
for(i=0;i<n;i++)
{
*(p+i)=*(q+i);
}
*(p+i)='\0';
for(i=0;i<n-1;i++)
{
printf("a[%d]=%c b[%d]=%c\n",i,*(p+i),i,*(q+i));
}
}
int main(int argc, const char *argv[])
{
//使用指针实现字符串拷贝
char a[10]="";char *p=a;
char b[]="jsdfgh";char *q=b;
MyStrcpy(a,b,sizeof(b)/sizeof(b[0]));
return 0;
}
2.2 使用指针实现字符串比较
函数:void MyStrcmp(char *p,char *q)
#include <stdio.h>
#include <string.h>
void MyStrcmp(char *p,char *q)
{
char i=0,j=0;
char cha;
while(*(p+i)==*(q+i))
{
if(*(p+i)=='\0'&&*(q+i))
break;
else
{
i++;j++;
}
}
cha=*(p+i)-*(q+i);
if(cha>0)
printf("a>b\n");
else if(cha=0)
printf("a=b\n");
else
printf("a<b\n");
}
int main(int argc, const char *argv[])
{
//使用指针实现字符串比较
char a[20]="";
char b[20]="";
printf("请输入两个字符串:");
scanf("%s%s",a,b);
MyStrcmp(a,b);
return 0;
}
2.3 使用指针实现计算单词的个数,返回单词的个数
输入:char str[]=”hello my student”
输出:有3个字符串
函数:int StrNum(char *p)
#include <stdio.h>
#include <string.h>
int StrNum(char *p)
{
int i,num=0;
for(i=0;i<strlen(p);i++)
{
if(*(p+i)!=' '&&*(p+i+1)==' '||*(p+i)!='\0'&&*(p+i+1)=='\0')
{
num++;
}
}
return num;
}
int main(int argc, const char *argv[])
{
//使用指针实现计算单词的个数,返回单词的个数
char a[]="hello my student";
int num=StrNum(a);
printf("a中有%d个单词\n",num);
return 0;
}
三、今日知识回顾
3.1 用指针实现两个数交换
函数:void Swap(int *a,int *b)
#include <stdio.h>
#include <string.h>
void Swap(int *a,int *b)
{
int t;
t=*a;*a=*b;*b=t;
printf("a=%d b=%d\n",*a,*b);
}
int main(int argc, const char *argv[])
{
//使用指针实现连个数的交换
int a=1,b=2;
printf("a=%d b=%d\n",a,b);
Swap(&a,&b);
return 0;
}
3.2 用指针计算一维数组的最大值
函数:int Max(int *p,int n)
#include <stdio.h>
#include <string.h>
int Max(int *p,int n)
{
int max,i=0;
for(i=0;i<n;i++)
{
if(i==0)
max=*p;
if(*(p+i)>max)
max=*(p+i);
}
printf("最大值为:%d\n",max);
}
int main(int argc, const char *argv[])
{
//计算一维数组的最大值
int a[10];
int *p=a;
for(int i=0;i<10;i++)
{
printf("请输入第%d个值:",i);
scanf("%d",&a[i]);
}
int n=sizeof(a)/sizeof(int);
Max(p,n);
return 0;
}
3.3 用指针实现一维数组冒泡排序
函数:void Bubble(int *p,int n)
#include <stdio.h>
#include <string.h>
void Bubble(int *p,int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(*(p+j)>*(p+j+1))
{
t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;
}
}
}
for(i=0;i<n;i++)
{
printf("%d\t",*(p+i));
}
}
int main(int argc, const char *argv[])
{
//用指针实现冒泡排序
int a[]={2,14,53,26,98,54,3};
int *p=a;
int n=sizeof(a)/sizeof(a[0]);
Bubble(p,n);
return 0;
}