指针

  

指针是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. mysql按字段分组并获取每个分组按照某个字段排序的前三条

    这是原始数据 想按照brand_id分组 并获取每个分组total_num最高的前3位 SQL语句为: > (select count(*) from data where brand_id = ...

  2. Mina学习之IoHandler

    IoHandler处理事件在Filter Chain 之后进行.IoHandler包含处理以下几个事件的功能: 1. sessionCreated event: session创建事件,对于Tcp而言 ...

  3. Linux后门入侵检测工具,附bash漏洞解决方法[转载]

    转自:http://blog.jobbole.com/77663/ 官网 ClamAV杀毒软件介绍 ClamAV是一个在命令行下查毒软件,因为它不将杀毒作为主要功能,默认只能查出您计算机内的病毒,但是 ...

  4. Java-struts2的问题 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    缺commons-lang3-3.1.jar,添加之后就可以了

  5. [置顶] sql 向另一个表导数据

    1.如果目的表已经存在: 这两个表结构必须一致 insert into table1 select * from tabel2 2.如果目的表不存在: 这个类似与克隆表 select * into t ...

  6. POJ 3734

    题目的大意: 给定待粉刷的n个墙砖(排成一行),每一个墙砖能够粉刷的颜色种类为:红.蓝.绿.黄, 问粉刷完成后,红色墙砖和蓝色墙砖都是偶数的粉刷方式有多少种(结果对10007取余). 解题思路: 思路 ...

  7. 开源免费天气预报接口API以及全国全部地区代码!!(国家气象局提供)

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...

  8. Spark1.0 安装

    1.下载Scala wget  http://www.scala-lang.org/files/archive/scala-2.10.3.tgz tar xvzf scala-2.10.3.tgz - ...

  9. Java 授权内幕--转载

    在信息安全性领域,授权是世界的的中心,因为它是控制个体(即人.进程和计算机)对系统资源的访问权限的过程.直到最近,在 Java 安全体系结构中相关的问题都是“这段运行中的代码的访问权限是什么?” 随着 ...

  10. Linux学习笔记总结--配置iptables防火墙

    将原有的iptables 文件保存一份 cp -p /etc/sysconfig/iptables /etc/sysconfig/iptables.bak 清空现有的规则 iptables -F ip ...