黑马程序员 C语言-----指针学习

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------         


   指针

     只有传递地址在函数内修改形参的值才会影响到外面实参的值

     因为要传入的是一个地址,所以只能用能够接收地址的变量来接收传入的地址

     而指针就是专门用于接收(保存)地址的

     指针变量定义格式:

     变量类型* 变量名;

      int* p;

     变量类型:将来可以保存什么类型的变量的地址

     * : 仅仅是一个象征(标志), 象征着这是一个指针变量

     变量名: 区分和标记一个变量

指针变量是专门用来保存地址的,不能给指针变量赋值一个常量

        int *temp=13;//错误写法

定义指针变量的时候,写的什么类型,将来指针变量就只能指向(保存)什么类型的变量(地址)

指针变量没有初始化,不要间接访问其存储空间

指针变量也可以定义的时候初始化

     如果要定义一个指针保存一个变量的地址, 把变量的类型拷贝过来,然后加上一颗星

     如果要定义个指针保存另一个指针的地址,把指针的类型和星拷贝过来,然后加上一颗星

     int i =10;

     int *ip = &i;

     int **ipp = &ip;

     int ***ippp = &ipp;


指针与数组

数据类型都有三个共同的特征

  1.可以用来定义变量

  2.可以用来作为函数的参数

     3.可以用来作为函数的返回

数组作为函数参数的时候会自动转换为指针类型, 8个字节

数组元素的访问方式总结:

     1.数组名[下标];

     2.指针变量名[下标];

     3.*(指针变量名 + i);

 数组的地址就是所占用存储空间中字节地址最小的直接的地址


   数组名就是数组的地址

注意指针是可以进行加法运算的但是和普通变量的加法运输不一样

       指针变量加1是加指针变量类型所占用存储空间的字节数


指针与字符串


接收字符串的两种方式

1>用数组来接收一个字符串,这个字符串是一个可变字符串

char name[]="itcast";

2>用指针来接收一个字符串,这个字符串是一个字符串常量

char *name="itcast";

定义字符串的两种方式比较:

     1.利用数组

    

     特点:字符串中的内容是可以修改的

     使用场合:字符串的内容需要经常修改的时候用数组

     

     2.利用指针

     

     特点:字符串中的内容是不可以修改的

     使用场合:字符串中的内容不需要修改,或者字符串需要经常使用(性能比较高)

注意点: 不要返回数组保存的字符串给函数调用者,因为当函数执行完毕,数组就释放了

把指向函数的指针作为函数的参数提高了代码的可扩展性


     变量类型 *变量名;

     

     没有返回值没有参数的

     有返回值没有参数的

     有返回值有参数的

     

     void (*pointer)();

     (*pointer) 是固定写法,代表指针变量pointer将来肯定是指向一个函数

     左边的void 代表指针变量将来要指向的函数没有返回值

     右边的() 代表指针变量将来要指向的函数没有形参

       p = test;

   指针变量指向了test函数

注意:给指向函数的指针赋值,一定不要在函数名称后面加上括号,加上括号代表着将函数的返回值赋值给指针变量


---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---------------------- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值