一:什么是指针

变量i  的存储地址为P(假设为2000),*P  为指针变量

一个变量的地址称为该变量的“指针”。如果有另一个变量专门存放另一变量的地址(指针),则它称为“指针变量”。

指针是一个地址,指针变量是存放地址的变量。

二:指针变量

int a =1,b=2;

int *p1;

p1=&a;//P1为指针变量     不可以写成*p1=&a;(*p1是变量a的值)

int *p2=&b;//可以同时定义和初始化

注:一个变量的指针:1.以存储单元编号表示的地址。2,指向存储单元的数据类型(int char...)

指向整型数据的指针类型 int*,读作,指向int 的指针  或 int指针

指针变量应用实例:swap

#include<stdio.h>
void swap(int *point1,int *point2);
int main()
{
int a =1,b=2;
int *p1,*p2,*p;
p1=&a;p2=&b;
printf("a=%d b=%d\n",a,b);
printf("p1=%d p2=%d\n",p1,p2);
swap(p1,p2);//p=p1;p1=p2;p2=p;可以实现swap
printf("a=%d b=%d\n",*p1,*p2);
printf("p1=%d p2=%d\n",p1,p2);
return 0;
}

void swap(int *point1,int *point2)
{
int *p;
p = point1;
point1 = point2;
point2 = p;
}

结果:a,b的值并没有改变

在函数调用时,p1的值传给point1,p2的值传给point2,执行完swap后,point1与point2的值是互换的,但并未影响到p1,p2。在函数结束时,变量point1和point2释放了。main函数中的p1,p2并未互换。也就是说,由于“单向传送”的“值传递”方式,形参值的改变不能使实参的值随之改变。

void swap(int *point1,int *point2)
{
int temp;
temp = *point1;
*point1 = *point2;
*point2 = temp;
}

结果 :a,b值互换,p1,p2地址没换。

main()

{

swap(a,b);

}

void swap(int x,int y)
{
int p;
p = x;
x = y;
y = p;
}

结果:x,y 的值会变,但是,ab不变

总结:不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指变量的值。

函数调用可以而且只可以得到一个返回值,而使用指针变量作参数,可以得到多个变化了的值。

三:指针数组

数组名代表数组中的首元素的地址。

int a[10];
int *p = &a[0];//等价: int *p = a;

//*(p+2)  *(p+2)     a[2] 三者等价

注意:++  与*同优先级,结合方向自由而左

当用数组名作参数时,如果形参数组中各元素的值发生改变,实参的值也会改变。

实参数组名代表该数组首元素的地址,而形参是用来接收从实参传递过来的数组首元素地址的。

int i,arr[10],*p=arr;//指针变量p指向arr[0]
int i ,*arr://指针变量arr未指向数组元素

如果用指针变量作为实参,必须先试指针变量有确定的值,指向一个已经定义的对象。

四:通过指针引用多维数组

a[3][5];

数组名a表示二维数组首行的首地址。

a+1表示序号为1的行的首地址。

a[0]的地址&a[0][0] ,a[1]的地址&a[1][0],a[1][1]的地址 a[1]+1。

最新文章

  1. hibernate-mapping-3.0.dtd;hibernate-configuration-3.0.dtd;hibernate.properties所在路径
  2. 【OpenCV练习】图片腐蚀
  3. 重构13天 抽取方法对象(Extract Method Object)
  4. easyui datagrid 通过复选框删除新追加的数据问题
  5. 【翻译】Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解)
  6. OCR文字识别软件 怎么识别包含非常规符号的文本
  7. Python 创建和发布安装函数模块
  8. 配置Windows Update,补丁更新
  9. IP头部校验(转)
  10. 超强1000 JQuery插件
  11. redis介绍。
  12. linux命令读取文件中特定行
  13. 关于Matchvs一些使用心得与建议
  14. javascript是什么,可以做什么?
  15. mysql插件的初始化
  16. 【BZOJ4316】小C的独立集(仙人掌,动态规划)
  17. Pandas——ix 与 loc 与 iloc 与 icol 的区别
  18. 单字节编码&amp;双字节编码
  19. SpringBoot------集成MyBatis
  20. 再学Java 之 解决No enclosing instance of type * is accessible

热门文章

  1. php--在apache上配制rewrite重写
  2. 浏览器获取ip地址
  3. The Simplified Project Management Process
  4. SQLSERER 中select排序问题
  5. cat 命令(转)
  6. jenkins邮件模板
  7. 30天,APP创业从0到1【7.11郑州站】
  8. Inside Kolla - 01 简介
  9. pip使用国内镜像服务器
  10. Java遇见HTML——JSP篇之JavaWeb简介