学习任务:今天学习了关于指针的内容。
理解:所有的指针都是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;
}