7.25日报

学习任务:今天学习了关于指针的内容。

理解:所有的指针都是4字节。

          一、 *的两个含义:1、定义的时候:表示后面的变量是一个指针(无取值的意思)

                                  2、使用的时候:表示取值(*p前无 int,char等等)

          二、*px++和(*px)++的区别

#include <stdio.h>
int main()
{
    int x=3,y=0,*px=&x;
    printf("%p\n",px);
   // y=*px+5;
    y=++*px;
    y=*px++;
    printf("%p\n",px);
    printf("%d",y);
}

*px++:等于(*px++),不指向x 

(*px)++:指针所指向的地址是地址里面的值加1

三、swap传参

错误: 

#include <stdio.h>
void swap(int x,int y)
{
    int temp=x;
        x=y;
        y=temp;
}
int main()
{
    int a=1,b=2;
    swap(&a,&b);
    printf("%d %d",a,b);
    return 0;
}

正确:

#include <stdio.h>
void swap(int *x,int *y)
{
    int temp=*x;
    *x=*y;
    *y=temp;
}
int main()
{
    int a=1,b=2;
    swap(&a,&b);
    printf("%d %d",a,b);
    return 0;
}

涉及到修改实参内存值的时候,需要传地址。错误的代码形参交换位置后并没有传递给实参,swap函数执行结束后,它们被释放。

四、指针变量的使用步骤

1、定义一个指针

2、给指针赋值

3、正常使用指针进行运算

五、判断是否为子串

从str串的第一个字符开始比较,ptr串的长度为单位向后比较

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    int len_str,len_ptr;
    char *str,*ptr;
    str=(char*)malloc(sizeof(char)*32);
    ptr=(char*)malloc(sizeof(char)*32);
    int i;
    printf("Please input:\n");
    scanf("%s%s",str,ptr);
    len_str = strlen(str);
    len_ptr = strlen(ptr);
    if(len_str<len_ptr)
    {
        printf("error!");
    }
    for(i = 0;i <len_str-len_ptr+1;i++)
    {
        if(strncmp(str + i, ptr, len_ptr)==0)
        {
            printf("%s是%s的子串\n",ptr,str);
            break;
        }
        if(i == len_str -len_ptr)
        {
            printf("%s不是%s的子串\n",ptr,str);
        }
    }
    
        return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42487214/article/details/81208831
今日推荐