终于进入了指针的学习,指针时c语言的核心部分,它可以根据用户需求,分配实际空间的大小,不会发生空间浪费,也可以指向任何一种类型的地址,指向任何一个空间,可以使代码看起来更简洁,运行速度快。下面是脑图:
课堂练习:
1.计算一维数组的最大值,并返回最大值
int Max(int *p,int n) 使用*(p+i)
int Max(int *p,int n)
{
int i,max;
for(i=0;i<n;i++)
{
if(i==0)
{
max=*(p+i);
}
if(max<*(p+i))
max=*(p+i);
}
return max;
}
int main(int argc, const char *argv[])
{
int arr[]={12,3,1,4,6,34,6};
int max=Max(arr,sizeof(arr)/sizeof(arr[0]));
printf("最大值是:%d\n",max);
}
2.指针实现一维数组冒泡排序
void Bubble(int *p,int n)
void Bubble(int *p,int n)
{
int i,j,temp;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(*(p+j) > *(p+j+1))//if(arr[j]>arr[j+1])
{
temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;
}
}
}
}
int main(int argc, const char *argv[])
{
int arr[]={1,2,3,4};
int *p=&arr+1;
printf("%d ",*(p-1));
return 0;
}
Day9作业:
1.使用指针实现字符串拷贝
void MyStrcpy(char *p,char *q)
#include <stdio.h>
#include <string.h>
void MyStrcpy(char *p,char *q){
int i = 0;
while(1){
if(*(p+i) != '\0'){
*(q+i) = *(p+i);
i ++;
}else{
return;
}
}
}
int main(int argc, const char *argv[])
{
char a[10] = "sdfgg";
char b[20] = "\0";
MyStrcpy(a,b);
puts(b);
return 0;
}
结果如下:
2.使用指针实现字符串比较
Void MyStrcmp(char *p,char *q)
#include <stdio.h>
#include <string.h>
int MyStrcmp(char *p,char *q);
int main(int argc, const char *argv[])
{
char a[20] = "\0";
char b[20] = "\0";
printf("请输入2个字符串\n");
scanf("%s %s",a,b);
getchar();
int num = MyStrcmp(a,b);
if(num != 0){
printf("2个字符串不相等,a-b=%d\n",num);
}else{
printf("2个字符串相等\n");
}
return 0;
}
int MyStrcmp(char *p,char *q){
int i = 0;
while(1){
if(*(p+i) - *(q+i) != 0){
return *(p+i) - *(q+i);
}
if(*(p+i) == '\0'){
return 0;
}
i ++;
}
}
结果如下:
3,使用指针实现计算单词的个数,返回单词的个数
Char str[]=”hello my student”
输出有3个字符串
Int StrNum(char *p)
#include <stdio.h>
#include <string.h>
int StrNum(char *p);
int main(int argc, const char *argv[])
{
char arr[] = " hello my students i am yours teacher ";
int n = StrNum(arr);
printf("一共有%d个单词\n",n);
return 0;
}
int StrNum(char *p){
int type = 0;
int type2 = 0;
int i = 0;
if(*p == ' '){
type2 = 1;
}
while(1){
if(*(p+i) == '\0' && type2 == 1){
return type;
}
if((*(p+i) == ' ' || *(p+i) == '\0') && type2 == 0){
if(*(p+i) == '\0'){
type ++;
return type;
}
type ++;
type2 ++;
}
if(type2 == 1 && *(p+i) != ' '){
type2 --;
}
i ++;
}
}
结果如下: