一、指针的使用
1.1指针的简单使用
指针是一个存储变量内存地址的变量,它允许我们直接访问存储在该地址的数据。在C语言中,指针经常用于动态分配内存、传递函数参数、以及在函数之间传递地址等操作。
下面是一个使用指针的简单示例:
int main()
{
int num = 10; // 定义一个整型变量
int *ptr; // 定义一个整型指针
ptr = # // 将指针指向变量num的地址
printf("num的值为:%d\n", *ptr); // 通过指针访问num的值
return 0;
}
在上面这个例子中,指针ptr存储了变量num的地址,并通过对指针解引用*ptr,我们可以访问到num的值。
1.2库函数strlen的模拟实现
库函数strlen是C语言标准库<string.h>中的一个函数,它的功能是求字符串长度,统计的是字符串中'\0'之前的字符的个数
参考代码如下:
#include<stdio.h>
#include<string.h>
//模拟实现库函数strlen
int StringLength(char* arr)
{
int count = 0;
while (*arr != '\0')
{
count++;
arr++;
}
return count;
}
int main()
{
char arr[10000];
printf("请输入字符串:");
gets(arr);
int len = StringLength(arr);
printf("len = %d", len);
return 0;
}
二、指针的传址调用
当我们想要通过一个函数实现两个整型变量的交换,我们可能会写出如下代码:
#include<stdio.h>
//编写一个函数,实现两个整型变量的交换
void Swap1(int x, int y)
{
int temp = 0;
temp = x;
x = y;
y = temp;
}
int main()
{
int a = 10;
int b = 20;
Swap1(a, b);
printf("a = %d , b = %d\n", a, b);
return 0;
}
程序运行后我们发现并没有实现想要的效果
a、b两个变量交换失败的原因是 :Swap1函数内部创建了形参x、y来接收a、b的值,但是x与a的地址、y与b的地址不同,在Swap1函数内部交换x、y的值自然不会影响到a、b。Swap1函数在使用的时候,是吧变量本身的值传给了函数,这种传参方式称为传值调用。实参传递给形参的时候,形参会单独创建一份临时空间来接收实参,对形参的修改不影响实参。
所以要想成功实现,我们就需要在调用函数的时候,函数内部操作的就是main中的变量,这就需要用到指针。
代码如下所示:
void Swap2(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a = 10;
int b = 20;
//Swap1(a, b);
Swap2(&a, &b);
printf("a = %d , b = %d\n", a, b);
return 0;
}
以上代码结果如下图所示:
Swap2成功实现了两个变量的交换。
这里调用Swap2函数的时候是将变量的地址传递给了函数,这种函数调用方式叫:传址调用。
传址调用,可以让函数和主调函数之间建立真正的联系,在函数内部就能实现修改主调函数中的变量。
更多C语言相关练习请访问:test_c: C语言练习,包括常见语法练习以及小项目练习。 (gitee.com)