C语言-指针复习1

        指针(pointer),是C语言最重要,也是最复杂的概念之一,用于储存变量的地址,这里先介绍一元&运算符的用法。

        一元&运算符给出变量的储存地址,如果pooh是变量名,则&pooh是变量的地址,可以把地址看作变量在内存中的位置。

pooh = 24;
printf("%d %p\n, pooh, &pooh");
将输出
24 0b46    //0b46是变量pooh的地址

指针简介

        指针是一个值为内存地址的变量,正如char类型的值是字符,int类型的值为整数,指针变量的值是地址

        假设指针变量名是ptr,可以这样用。

ptr = &pooh;    //将pooh的地址赋给ptr

        对于这条语句,我们说ptr “指向” pooh。ptr和&pooh的区别是ptr是变量,&pooh是常量。ptr是可修改的左值,&pooh是右值,可以将ptr指向别处。

ptr = &bah;    //将pooh的地址赋给ptr

解引用运算符

        假设ptr指向bah,如上图。然后使用间接运算符*找出储存在bah中的值,该运算符也称为解引用运算符。注意不要和乘法运算符*混淆。

value = *ptr ;    //找出ptr指向的值

        上两句语句放在一起相当于:

value = bah ; 

声明指针 

        声明指针变量时必须指定指针所指向变量的类型。因为不同的变量类型占用不同的存储空间

int * pi;     //pi是指向int类型变量的指针
char * pc;    //pc是指向char类型变量的指针

        类型说明符表明了指针指向数据的类型,星号(*)表明声明的变量是一个指针。*和变量之间的空格可有可无,一般在声明时有空格,解引用时无空格。

        pc指向的值(*pc)是char类型,那么pc本身是什么类型呢,我们描述它的类型是“指向char类型的指针”。pc的值是一个地址,在系统内部,用无符号整数表示。但指针不是整数类型,指针类型是一个新类型。

在函数形参中使用指针

         形参中使用指针可以解决函数间的通信问题。

void change(int * u,int * v);

int main(void)
{
    int x = 5,y = 10;
    change(&x,&y);     //把地址发送给函数
    return 0;
}

void change(int * u,int * v);
{
    int temp;
    temp = *u;         //temp获得u指向对象的值
    *u = *v;
    *v = temp;
}

        程序执行后x=10,y=5。通过指针和解引用(*)运算符,该函数可以访问储存在这些位置的值并改变他们。仔细思考就可以理解。

        一般而言,可以将变量的两类信息传给函数,分别是变量的值和变量的地址

function1(x);
function2(&x);

        第一种形式要求函数定义中的形式参数是一个与x类型相同的变量,第二种形式要求形参必须是一个指向正确类型的指针。

int function1(int num);
int function2(int * ptr);

        如果要计算或处理值,则使用第一种形式的函数调用,如果要在被调函数中改变主调函数的变量,则使用第二种函数调用。

        对本例而言,指针让exange()函数通过自己的局部变量改变main()中变量的值。

        被调函数一般不会改变主调函数中的变量,如果要改变,应使用指针作为参数。如果想把更多的值传回主调函数,则必须这么做。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值