指针
//指针:变量,存储的是指针所指向的变量的地址
//int型的整型变量
int a = 0;
//int型的指针变量
int *p = &a;
一级整型指针图示
一级指针图示.png
一级指针图示2.png
一级指针图示2.png
一级指针图示2.png
//指针:变量,存储的是指针所指向的变量的地址
//int型的整型变量
char a = 97;
int b = 12;
//int型的指针变量
char* p = &a;
// p = &b;
// int *q = p;//p和q指向同一片内存地址
printf("%d %p\n",sizeof(p),&a);
//无论是整形、字符型或者结构体类型的指针
//都是4个字节。
//指针和数组
void test(void){
int *p = NULL;//定义的同时赋初值
int arr[3]={1,2,3};
p = &arr;//p = arr; arr就是数组的首地址
printf("%d ",arr[1]);
printf("%d ",p[1]);//按照数组的形式操作数组
printf("%d ",*p);
//此时的1代表的是一个数据单元,4个字节
//p+1指向的是数组中的arr[1]元素的地址。
}
//输出数组
//int *p = arr;
//数组作为函数的参数进行传递时,退化为指针
//int *p 或者 int arr[]
void my_print(int arr[],int len){
// int len = sizeof(p);//4个字节
int i = 0;
for(;i
printf("%d ",arr[i]);//*(p+i)
}
}
练习
查找字符串中是否存在指定的字符
如果存在,返回相对应的下标值,否则返回-1
int find_position(char *arr,char ch){
if(NULL == arr)//0 == i
return -2;//代表空指针
int i = 0;
while(arr[i++]){
if(arr[i]==ch){
return i;
}
}
return -1;//没找到字母ch
}
练习2:
实现strstr,查找子串,如果找到子串那么输出子串在目标串中的起始位置。
void my_strstr(char *str,char *sub_str){
if(NULL == str || NULL == sub_str){
return -2;
}
char *temp_str = str;
char *temp_substr = sub_str;
int i = 0;
int j = 0;
int temp = 0;
//"hello"
//"he"
//查找sub_str中第一个字母是否在str中出现了
while(temp_substr[i]){
while(temp_str[j]){
if(temp_substr[i] == temp_str[j]){
temp = j;
break;
}
j++;
}
if(temp_substr[++i]==temp_str[++j]){
break;
}
}
printf("%s",str+temp);
}
练习3:统计字符串长度
int my_strlen(char *arr){//char arr[]
int i = 0;
int count = 0;
while(arr[i]){//*(arr+i)
count++;
i++;
}
return count;
}