欢迎光临
我们一直在努力

C语言指针(二)

补充

指针的算术运算

  • 不同类型指针在+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;
}

赞(0)
未经允许不得转载:171主机测评 » C语言指针(二)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址