Linux下c语言函数中:指针参数的传入、指针参数的传出

函数指针参数的传入:int型

#include <stdio.h>
#include <string.h>

void fun(int *p)
{
        *p = 8; //这边(*p)表示传进来的是a的地址,改变(*p)的值,就是改变a的地址里面的值
        printf("函数:p指向:%p, p指向地址中的值: %d,p的地址:%x \n",p,*p,&p);  //这里可以对比主函数p本身地址,和函数p本身的地址是不一样的
        int b = 9;
        p = &b;   //这里是把函数的p指向b的地址,所以无法影响主函数中的p
        printf("函数:p指向:%p, p指向地址中的值: %d,p的地址:%x \n",p,*p,&p);
}

int main(int argc, char* argv[])
{
        int a = 7;
        printf("主函数:a的地址:%x \n",&a);

        int *p = NULL;  //p一开始的地址:adcd4e30
        printf("主函数:p指向:%p, p的地址:%x \n",p,&p);

        p = &a;  //现在p指向a的地址: adcd4e2c
        printf("主函数:p指向:%p, p指向地址中的值: %d,p的地址:%x \n",p,*p,&p);

        fun(p);   //这里是把a的地址传进去: adcd4e2c
        printf("主函数:p指向:%p, p指向地址中的值: %d,p的地址:%x \n",p,*p,&p);
        return 0;
}


结果:

函数指针参数的传入:char型

#include <stdio.h>
#include <string.h>

#define SIZE 32

void fun(char *p)
{
        char b[SIZE] = {0};
        memset(b,0,sizeof(b));
        strcpy(b,p);  //b复制p中地址的值
        printf( "b的值: %s\n",b);
}

int main(int argc, char* argv[])
{
        char a[SIZE] = "hello is me!";

        fun(a);

        return 0;
}

结果:

函数指针参数的传出:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE 32

void fun(char **p)
{
        char b[SIZE] = "hello is me !";
        strcpy(*p,b);
}

int main(int argc, char* argv[])
{
        char *p = NULL;

        //开辟SZIE大小的空间,来存放函数返回的值
        p = (char *)calloc(1,SIZE);
        if(NULL == p)
        {
                printf("calloc is error \n");
                p = NULL;
        }else{
                fun(&p); //把p的地址传进去,这个地址我们已经开辟了一个空间
                printf("p的值: %s\n", p);
        }

        //用完之后,释放p的空间
        if(NULL != p)
        {
                free(p);
                p = NULL; //p要等于NULL,不然会成为野指针
        }

        return 0;
}

结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值