嵌入式工程师学习Day9——指针

        终于进入了指针的学习,指针时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 ++;
	}
}

结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值