初学指针应用举例

本文介绍了指针在C语言中的应用,通过举例说明如何使用指针实现两个变量值的交换。错误的非指针方法无法实现变量值的真正交换,而正确的指针方法则能在被调函数中修改主调函数的变量值,确保交换有效。
摘要由CSDN通过智能技术生成
#include<stdio.h>
int main()
{
int *p;
int i = 5;
*p = i;(p是地址,i是值,不能把i赋给p)
printf("%d\n", *p);
return 0;
}

int *q中,q是地址,*q是值

a与b的值互换问题
基础写法(能完成互换功能)

#include <stdio.h>
void main()
{
int a = 3;
int b = 5;
int t;
t = a;
a = b;
b = t;
printf(“a = %d,b = %d”, a, b);
}

未使用指针会出现的错误写法(不能完成互换功能)

#include <stdio.h>
void huhuan(int a, int b)
{
int t;
t = a;
a = b;
b = t;
return;
}
void main()
{
int a = 3;
int b = 5;
huhuan(a, b);
printf(“a = %d,b = %d”, a, b);
}

该程序从主函数进入,把实参a发送给形参a,把b发送给形参b,但只互换了形参a和b的值,不影响主函数a和b,且执行完后形参a和b销毁,并未互换主函数a和b的值,输出的a和b指的仍然是主函数的a和b

使用指针

错误写法(未完成调换)

#include <stdio.h>
void huhuan(int * p, int * q)
{
int * t;//(如果要互换p和q的值,则t必须是int*,不能是int,否则会出错)
t = a;
a = b;
b = t;
return;
}
void main()
{
int a = 3;
int b = 5;
huhuan(&a, &b);
(//huhuan(*p, *q);是错误的
//huhuan(a, b);是错误的,因为p是地址,a是值)
printf(“a = %d,b = %d”, a, b);
}

正确做法

#include <stdio.h>
void huhuan(int * p, int * q)
{
int t;//如果要互换p和q的值,则t必须定义成int,不能定义成int*,否则语句会出错
t = * p;//p是int *;*p是int
* p = * q;
* q = t;
return;
}
void main()
{
int a = 3;
int b = 5;
huhuan(&a, &b);
printf(“a = %d,b = %d”, a, b);
}

如何通过被调函数修改主调函数普通变量的值
1.实参必须为该普通变量的地址
2.形参必须为指针变量
3.在被调函数中通过
*形参名 = ……
的方式可以修改主调函数相关变量的值

错误及正确示例:

 #include <stdio.h>
    int main()
    {
    int * p;//等价于int p,也等价于int p
    int i = 5;
    char ch = ‘A’;
    p = &i;
    *p = 99;
    //p = &ch;(错误在类型不同不能赋值)
    //p = ch;(错误)
    //p = 5;(错误在p是地址,不能赋值)
    printf(“i = %d,*p = %d\n”, i, *p);
    return 0;
    }
    结果:i=99;p=99
    因为&i = i

  #include <stdio.h>
    void f(int i)
    {
    i = 99;
    }
    int main()
    {
    int i = 6;
    printf(“i = %d\n”, i);
    f(i);
    printf(“i = %d\n”, i);
    return 0;
    }
    结果:i=6    i=6

  #include <stdio.h>
    int f(int i)
    {
    i = 99;
    return i;
    }
    int main()
    {
    int i = 6;
    printf(“i = %d\n”, i);
    t = f(i);
    printf(“i = %d\n”, t);
    return 0;
    }
    结果:i = 6    i = 99

  #include <stdio.h>;
    void g(int * p, int * q)
    {
    *p = 1;
    *q = 2;
    }
    int main()
    {
    int a = 3, b = 5;
    g(&a, &b);
    printf("%d %d\n", a, b);
    return 0;
    }
    答案 a=1   b=2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值