指针

3_18

void main()
{
char *p, *q;
p = (char *)malloc(sizeof(char) * 20);
q = p;
scanf(“%s %s”, p, q);
printf(“%s %s\n”, p, q);
}
若果输入的值为 def  abc,输出结果为 def def 

这里写图片描述

q=p

解释:

1、p指向了一段内存空间,q也指向了p所指的内存空间
2、赋值语句中,把一个对象的所有成员参数,向另一个对象赋值

区分:

char *p, **q;
p = (char *)malloc(sizeof(char) * 20);
//q指向p的地址,q保存了p的地址
q = &p;

这里写图片描述

q=&p;

在函数传参过程中,有值传递和地址传递。值传递时,在函数作用域中变量的值有效,一旦出了作用域变量的值无效;地址传递时,出了函数作用域变量的值依然有效

void foobar(int a, int *b, int **c)
{
    int *p = &a;
    *p = 101;
    *c = b;
    b = p;
}

int main()
{
    int a = 1;
    int b = 2;
    int c = 3;
    int *p = &c;
    foobar(a, &b, &p);
    printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p);
    return (0);
}

这里写图片描述

result

a=1,出了foobar函数,a=101会消失;
b=2;b=p即b与p指向了同一空间 ; p保存了b的地址,*p取b里面的内容2;
c=3;无影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值