黑马程序员--指针与变量
来源:互联网 发布:淘宝网排行榜在哪里 编辑:程序博客网 时间:2024/06/06 03:14
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
变量的指针就是变量的地址,存放变量地址的变量是指针变量,它用来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,用“ * ”表示指向的对象。不同于其他类型变量,指针变量是用来专门存放地址的。
例如已定义point为指针变量,那么*point是point所指向的变量。如图:
可以看出,* point也代表一个变量,它和变量i是同一回事。i=3就等价于* point=3。而*point=3的含义就是将3赋值给指针变量point所指向的变量。
需要注意的是,定义指针变量时,*表示该变量类型为指针类型变量,如 *point,指针变量名为point而不是 *point。
指针变量中只能存放地址,不能将任何非地址类型的数据赋给一个指针变量,例如int *point = 100;是错误的。
对于取地址运算符&和指针运算符*,例如&a为变量a的地址, *p为指针变量p所指向的存储单元的内容(即p所指向的变量的值)。
#include<stdio.h>int main(){ int a; int *point; a = 100; point = &a; printf("%d\n",a); printf("%d\n",*point); return 0;}
运行结果为:
100
100
程序中*point出现了两次,第一次为定义指针变量point,第二次则代表了point所指向的变量。“ point = &a ”不能写成“ *point = &a ”,因为a的地址是赋给指针变量point,而不是赋给 *point(即变量a)。
下面举一个指针变量一个用的例子:输入a和b两个 整数,按先大后小的顺序输出a和b。
#include<stdio.h>int main(){ int a, b, *p1, *p2; printf("请输入两个整数,以逗号分隔:\n" ); scanf("%d,%d",&a,&b); p1 = &a; p2 = &b; if (a<b) { p1 = &b; p2 = &a; } printf("a = %d,b = %d\n",a,b); printf("max = %d,min = %d\n",*p1,*p2); return 0;}
当输入21和36时的运行结果如下:
21,36
a=21,b=36
max=36,min=21
其实,a和b的值并未交换,只是p1和p2的值发生了变化,p1由原来的&a变成了&b,p2由原来的&b变成了&a,这样在输出*p1和 *p2时,实际是输出变量b和a的值了。这个算法不是交换整型变量的值,而是交换两个指针变量的值。
- 黑马程序员--指针与变量
- 黑马程序员 变量与数据类型
- 黑马程序员-常量与变量
- 黑马程序员-数组与指针
- 黑马程序员 指针与数组
- 黑马程序员 - 数组与指针
- 黑马程序员——C语言------指针和指针变量
- 黑马程序员_变量, 数据类型与表达式
- 黑马程序员-常量与变量 运算符
- 黑马程序员—变量与数据类型
- [黑马程序员]_静态成员与变量
- [黑马程序员]_静态成员与变量
- 黑马程序员-----关键字与变量命名
- 黑马程序员 java入门:常量与变量
- 黑马程序员-变量与数据类型转换
- 黑马程序员__数据类型与变量
- 黑马程序员_C_函数与指针
- 黑马程序员--指针与数组字符串
- Oracle中varchar ,varchar2的区别
- Matlab处理数据完成后自动发送邮箱提醒
- 顺序表(C++语言实现)
- web.xm里过滤器过滤之后,String类型的数据还是乱码解决方案
- windows批处理命令大全
- 黑马程序员--指针与变量
- log4j 详解和使用
- 程序员的自我修养——链接,装载与库(第3,4部分)
- Android APP界面标注、尺寸换算和APP标注工具
- 设计模式C++实现(9)——享元模式
- 如何计算算法复杂度
- macbookpro怎么恢复出厂设置
- setsockopt()用法(参数详细说明) recv、send的超时处理
- JAVA字符串格式化-String.format()的使用