指针

  

指针是c语言中很灵活的一个内容,当然,灵活的都是较难掌握的。不过,只要理解其实质,学习,运用指针还是一件很轻松的事情的。

首先理解,1.什么是指针?

在c语言中,指针也同Int ,double 一样是一种数据类型,int 存放的是一个整型数字,double 存放的是一个双精度的数字,指针存放的是地址。记得老师讲过这样一个形象的例子:指针类似于一间仓库的门牌号。这个门牌号能体现这个房间的具体位置。

2.指针有什么用?

因为指针存放的是地址,所以指针能直接访问,传递那个地址上的数据和那个地址,这无疑对于我们下次即将说的  函数 有很大的方便。初步了解指针还是需要自己写几个小程序观察一下,然后就知道了。

在写程序之前,需要知道怎么用指针。

因为指针也是一个数据类型,所以它的用法和 int的用法差不多都是一样的。首先,1.定义指针  ,其格式为  数据类型(如 int ,double ,struct) + *标识符; 数据类型的意义是,你现在定义的这个指针所存放的地址是指向什么数据类型的,例如 int *p; 它的意思就是定义一个指向整型数字的指针变量。

那么,下面就写写小程序探索探索吧。

code:

#include<stdio.h>
int main()
{
int a; //定义整型
scanf("%d",&a);
while(a--)
{
int *p;//定义整型的指针变量
p=&a; //将a的地址赋给指针变量p
//现在p存放的就是变量a所代表的数在计算机中所存放的地址了
printf("%d--",*p);//输出p指向的地址存放的内容
printf("%d\n",p);//输出p的地址
}
}

运行结果:

从上面的代码中可以很明确的看出,指正存放的是变量的地址。那么思考一下,指针的地址又该是多少呢? 把上面程序的最后一个语句的前面加上一句 printf("%d--",&p);  运行之后可以看出是这样的结果。

   可见指针也是需要内存单元去存放的。

上面存在的还比较陌生的符号再说一下,* 有两种用的地方1.在定义的时候用到,代表定义了一个指针变量,(如 int *p),2.在表达式中出现,代表取内容符号,取得p存放的地址里面存放的内容,(如 *p) 。还有 & ,它被用作取地址符,取得内容所存放的地址,(如 &p)。

给两个数,交换这两个数,输出这两个数,相信每一位读者都会独立的写出此程序,但是为了麻烦起见,能否通过对地址的操作来交换这两个数呢?当然能。

code

#include<stdio.h>
int main()
{
int a,b;
int *p,*q,*w; //定义指针变量
scanf("%d%d",&a,&b);
p=&a; //p存放变量a的地址
q=&b;//q存放变量b的地址
printf("1:%d %d\n",*p,*q);
//地址的交换,与两个数的交换方式一样
w=p;
p=q;
q=w;
//此时p存放变量b的地址,q存放变量a的地址
printf("2:%d %d\n",a,b);
printf("3:%d %d\n",*p,*q);
printf("4:%d %d\n",&a,&b);
printf("5:%d %d\n",p,q); }

运行结果:

还需要提示的是,c语言中的很多东西都是可以镶嵌重叠的,这我曾多次提到,而且指针也不例外  ,比如,你定义了这样一个变量 int **q;这个变量有什么用呢?它与int *p;有什么关系? 前面那个q代表着定义了一个二级指针,它的作用是指向一级指针的地址,如   q=&p; 把一级指针p的地址赋给二级指针 q。同时三级,四级都是一样的道理,只要记住指针保存的是地址,地址的内容与它所对应的数据类型有关。

指针被称为c语言中最难应用的部分,不过只要掌握原理,仔细想想,一些基础的问题还是能很容易想明白的。

简单学C——第六天的更多相关文章

  1. linux就该这么学,第六天了

    今天学了第六天了,主要讲计划任务了,,at,命令,单次有效,一次性的,crontd服务(周期性)计划任务,crontab -e创建,编辑计划任务.crontab -l查看计划任务,crontaab - ...

  2. 简单学C——第四天

    数组 在学数组之前,有必要把前面的知识复习一遍,当然我的复习,仅仅只是提一下,而对于你,则应该认真的看一下前面的知识点,不懂可以百度,哈哈. 前面我们大致学了 1.定义变量,2.数据的输入与输出,3. ...

  3. 简单学C——第二天

                 控制结构(-) 相信大家对流程图肯定很熟悉.下面我将介绍的正是关于此方面的,c语言中,控制结构大体分为选择结构和循环结构. 一.选择结构:     先贴出一般用于选择结构的语 ...

  4. 简单学c——前言

      1.学C语言需要什么基础吗? 零基础. 2.什么是C语言? C语言是一种编程语言. 3.什么是编程语言? 编程语言是用来定义计算机程序的形式语言,是一种被标准化的交流技巧,用来向计算机发出指令. ...

  5. 简单学ES6 - class

    前言 随着ES6标准的定稿,众多的特性也趋于稳定,各大浏览器也在逐步实现这些特性,那么对ES6有更多的了解就无可厚非了. 准备 在学习ES6之前,我们需要有一个环境来测试ES6代码.在这里我推荐使用n ...

  6. 简单学JAVA之---接口的定义与实现

    为了巩固自己学习的知识,可能会对自己以后所学的知识做一个小结,今天就来一篇接口的定义与实现. 在java中,我们可以通过继承得到另一个类中的方法,但是这个仅仅满足继承一个方法,那有办法可以多个继承不, ...

  7. 简单学C——第七天

    函数 函数是C语言重要的组成部分,你现在,或者以后(如果C没什么变化的话)所写的任何一个C语言程序都是由一个一个的函数组合在一起的,当然,现在或许你只会在主函数 main中写一个小程序,那么在看了本篇 ...

  8. 简单学C——第五天

    结构体 首先明确,结构体是一种构造的数据类型,是一种由多个数据类型如 int,char,double,数组或者结构体......组成的类型,现在告诉大家如何定义一个结构体.在定义int整型变量时,大家 ...

  9. 简单学C——第三天

    控制结构(二)     前面我们已经了解到了,控制结构中的判断结构,当然switch语句也是判断语句.不过如果if...else...语句你会了,我相信switch语句你也一定会的,它们的功能都是差不 ...

随机推荐

  1. 12种超酷HTML5 SVG和CSS3浮动标签效果

    这是一组效果很炫酷的SVG和CSS3表单浮动标签特效.这组浮动标签特效共12种效果,这些浮动标签效果部分在元素的伪元素上使用CSS transitions和CSS animations完毕,一部分则使 ...

  2. 关于Opengl中将24位BMP图片加入�一个alpha通道并实现透明的问题

    #include <windows.h>#include <GL/glut.h>#include <GL/glaux.h>#include <stdio.h& ...

  3. Load resources from classpath in Java--reference

    In general classpath is the path where JVM can find .class files and resources of your application a ...

  4. java输入输出流小细节

    package System; public class Systemdemo { public static void main(String args[]){ demo1(); demo2(); ...

  5. hdu2026.java字符

    首字母变大写 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  6. android自定义控件之模仿优酷菜单

    去年的优酷HD版有过这样一种菜单,如下图: 应用打开之后,先是三个弧形的三级菜单,点击实体键menu之后,这三个菜单依次旋转退出,再点击实体键menu之后,一级菜单会旋转进入,点击一级菜单,二级菜单旋 ...

  7. Java基础知识强化之IO流笔记31:转换流出现的原因和格式

    1. 由于字节流操作中文不是特别方便,所以Java就提供了转换流.  字符流 = 字节流 + 编码表 2. 编码表 由字符及其对应数值组成的一张表 常见的编码表: • ASCII/Unicode字符集 ...

  8. 根据子级ID获取其所有父级

    当前位置>新闻中心>行业资讯 CLASSID CLASSNAME CLASSPID 1 新闻中心 0 2 行业资讯 1 3 公司新闻 1 4 媒体聚焦 0 当前位置<%=navNam ...

  9. 解析嵌套json字符串,一个json字符串中嵌套另一个json字符串

    我现在有一个字符串是这样: { "msg": { ", "attrName": "sensorData", "trans ...

  10. 核心运营报表无线端数据,pv,uv相关数据,从9月1号开始就没了,为什么?

    问题现象截图 核心运营报表 从获取数据的api的地址可以看出: http://data.51buy.com/json.php?biz=statistic&mod=OrderKeyData&am ...