补充
指针的算术运算
- 不同类型指针在+1的区别
char * 偏移量1个字节 int * 偏移量4个字节 float* 偏移量4个字节 double * 偏移量8个字节
- 不同类型执行解引用操作
char * 执行解引用操作,从指针存储的地址开始,往后(地址变大的方向)取 1个字节的数据 int * 执行解引用操作,从指针存储的地址开始,往后(地址变大的方向)取 4个字节的数据 float* 执行解引用操作,从指针存储的地址开始,往后(地址变大的方向)取 4个字节的数据 double * 执行解引用操作,从指针存储的地址开始,往后(地址变大的方向)取 8个字节的数据 char str[100]=“hello”; char *p=str; *p;
两个指针相加,无意义
其他 操作 指针在使用时候,有两个概念 ,指针变量本身, 指针指向的内容
指针减法 p-1 p-2;p应该指向一个数组。操作完成后,指针应该落在数组范围以内。
int a[10]={1,2,3,4,5,6,7,8,9,0};
int *p =a+1;
int *q = a+5;
printf("q-p %ld \\n",q–p); // 两个地址相减 ,前提这两个指针指向同一个数组。 意义,相
差的元素个数。 另外,如果这两个指针其他不同的地方,相减无意义。
++ ,p++ ; 先获得当前地址, 加上 sizeo(基类型) 字节 。计算的结果 写回指针变量本身。
— ,p— ; 先获得当前地址, 减去 sizeo(基类型) 字节。计算的结果 写回指针变量本
*/ %对指针无意义
对指针变量的修改
int main()
{
int b[5]={0};
int a[5]={0};
int *p = a;
*p =123; // 修改指针指向的内容
p = b; // 修改指针的指向
return 0;
}
8.函数使用指针作为参数
1.值传递 形参是实参的复制品,只能读取实参的数据,在被调函数内部,无法通过修改形参而改变实参。基本数据类型的变量,构造类型的变量。 2.地址传递 形参会接收到实参传递过来的地址,就可以在被调函数的内存,通过间接访问方式,通过修改形参,进而改变实参。传递数组,指针。
#include<stdio.h>
void swap(int *pa,int *pb)
{
int t=*pa;
*pa=*pb;
*pb=t;
}
int main()
{
int a=20;
int b=10;
swap(&a,&b);
printf("a:%d b:%d\\n",a,b);
return 0;
}
9.字符串数组的传参
mystrlen, mystrcpy,mystrcmp,mystrcat. 使用指针,访问数据。 比使用数组方式访问,高效,简洁
int mystrlen(char* pstr)
{
int len= 0;
while(*pstr)
{
len++;
pstr++;
}
return len;
}


