C语言 指针变量作为函数参数

指针变量作为函数参数
函数的参数,可以是指针类型。作用是将一个变量的地址传送到一个函数中;
#include<stdio.h>
void swap(int *pdest1,int *pdest2)  //两个指针变量作为函数形参
{                                 //此时,pdest1 指向了 a,pdest2 指向了 b
    int temp;
    temp=*pdest1;    //*pdest1(就是pdest1所指向的变量),实际就是 a.所以等价于temp=a; temp=5;
    *pdest1=*pdest2;  //*pdest2(就是pdest2所指向的变量),实际就是 b.所以等价于temp=a;a=6;
    *pdest2=temp;     //b=5;
}
int main()
{
    
    int a=5,b=6;
    int *p1,*p2;
    p1=&a; //p1指向了a
    p2=&b;  //p2指向了b
    printf("a=%d,b=%d\n",a,b);
    if(a<b)
    {
        swap(p1,p2);   //两个指针变量作为实参
    }
    printf("a=%d,b=%d\n",a,b);
}
C语言中,实参变量和形参变量之间数据传递时 单向传递的值传递,指针变量作为函数参数也要 遵循这个原则:
调用函数 swap() 不能改变实参指针变量的值(值就是地址 ,就是 p1还是指向了 a,p2还是指向了 b, 但是可以改变实参指针变量p1,p2 指向的变量,也就是在 swap()函数中,改变了 a,b的值。a,b就是实参变量p1,p2所指向的变量。
【简单来说就是:实参指针变量 保存的地址 不能变,实参指针变量 保存的 地址中的值 可以变
 
注意这种 错误写法
int *p;   //定义了整型指针
*p = 5;  //*p代表的是指针变量p所指向的变量,但是p 到底指向谁?是不确定的,所以*p可能会造成某个内存被无意修改了,从而使系统崩溃。
但是可以这样写:
int *p;   //定义了整型指针
int  a;
p=&a;   //指针变量指向了 a;
*p=5;   //这样等价于 a=5,相当于是给a 赋值了。
#include<stdio.h>
int main()
{
    int *p;   //定义了整型指针
int  a;
p=&a;   //指针变量指向了 a;
*p=5;   //这样等价于 a=5,相当于是给a 赋值了。
printf("a=%d\n",a);
}
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我已经记录下来了。下面是代码实现: ```c int findFirstNegative(int* arr, int len, int* index) { for(int i = 0; i < len; i++) { if(arr[i] < 0) { *index = i; return arr[i]; } } *index = -1; return -1; } ``` 这个函数有三个参数: - `arr`:指向数组的指针 - `len`:数组的长度 - `index`:指向下标的指针 函数返回值为数组中第一次出现的负数值,如果不存在负数则返回-1。同时,函数通过 `index` 指针返回满足条件的数据元素的下标,如果不存在负数则返回-1。 你可以按照以下步骤调用这个函数: 1. 声明一个整型变量 `index`,用于存储下标。 2. 调用 `findFirstNegative` 函数,并传入数组指针、数组长度以及 `index` 指针作为参数。 3. 判断函数的返回值,如果为-1,则说明数组中不存在负数;否则,返回的是数组中第一次出现的负数值,可以直接打印输出。 4. 如果函数返回了一个负数值,那么 `index` 指针的值就是满足条件的数据元素的下标,可以直接打印输出。 示例代码如下: ```c #include <stdio.h> int findFirstNegative(int* arr, int len, int* index); int main() { int arr[] = {1, 2, -3, 4, -5, 6}; int len = sizeof(arr) / sizeof(int); int index; int result = findFirstNegative(arr, len, &index); if(result == -1) { printf("数组中不存在负数\n"); } else { printf("第一次出现的负数是 %d,下标是 %d\n", result, index); } return 0; } int findFirstNegative(int* arr, int len, int* index) { for(int i = 0; i < len; i++) { if(arr[i] < 0) { *index = i; return arr[i]; } } *index = -1; return -1; } ``` 输出结果为: ``` 第一次出现的负数是 -3,下标是 2 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值