简书 c语言 指针,C语言-指针

指针

//指针:变量,存储的是指针所指向的变量的地址

//int型的整型变量

int a = 0;

//int型的指针变量

int *p = &a;

一级整型指针图示

4f8866a0329f

一级指针图示.png

4f8866a0329f

一级指针图示2.png

4f8866a0329f

一级指针图示2.png

4f8866a0329f

一级指针图示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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值