我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 指针 >

c语言中指针怎么使用?

归档日期:06-28       文本归类:指针      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:

  (1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元

  *a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:

  指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算

  (1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。

  在C语言中,你需要定义变量,那么你所定义的这个变量本身你要理解两层含义:

  (1)变量中的值是多少?有了值我们可以直接拿变量参与运算,eg. int a=5;在计算的时候a就表示5;

  (2)变量存储在内存中的什么位置?变量的存储位置,就是变量的地址,那么这个地址可以用指针来存储,eg. int a=5, *p= 在这里p就是指针变量,存储了变量a的地址,这个时候你要是用a变量的值,即可以直接用a,也可以用*p,*p是通过p这个指针(也就是a的地址),间接的找到a,在程序中*p与a是等价的。追问那么*p,**p,***p有什么区别?追答*p,**p,***p分别叫做一级指针、二级指针和三级指针。

  第二个**q中的q,你可以这样理解 用来存放地址 的地址,虽然有点绕,你可以体会一下,比如上一个p,它是指针型变量,这个变量的值是变量a的地址,那么p这个变量存在哪,它的地址在哪呢?这个时候就需要一个比p高一层的指针来存放p变量的地址,因此可以这样赋值 q=&p

  定义一个数组并初始化,int array[5]={2,5,12,7,8},定义一个指针变量并把数组的地址赋给它,int *p=array,注意数组名就是数组的地址,而且数组的地址就是首元素的地址。

  因此我们的指针变量就指向了数组的首元素,*p=2。如果把(p+1),那么指针变量就指向了数组的下一个元素5,因此我们可以利用指针来遍历数组的各个元素:

  我们都知道用数组存储字符串,如char name[20]=jack,上面已经简单讲述了指针指向数组,所以我们可以这样做,char *name=jack,指针变量指向字符串的首个字符并可以依次访问字符串的各个字符。

  我们需要知道怎样表示一个指针指向函数,说白了就是语法要正确,下面我也取一个代码块来说明一下:

  不难发现上面代码块里语句(*p)(a,b)可以用p(a,b)来代替,因为p和sum就是一样的,只是用前者可能更容易理解一点。

  而我们要知道怎样定义一个指针指向函数,int (*p)(int,int)这是固定写法,前面的int是指针将来指向的函数的返回值的类型,如果没有函数返回值,那就是void,后面括号里的两个int当然就是指针将指向的函数的形参。

  指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递。还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率。简单地说指针就是指向变量和对象的地址。

  1、在计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等;

  2、为了正确地访问这些内存单元,须为每个内存单元编上号。 根据一个内存单元的编号即可准确地找到该内存单元。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。内存单元的指针和内存单元的内容是两个不同的概念。

  指针是指向地址的,所以你对指针修改也会影响到原地址的值,所以当你需要在函数里修改函数外的变量时可以考虑指针,当然指针还可以连接结构体里的节点之类的,后面还有跟函数有关的,只要多揣摩就会了解了

本文链接:http://masterblue.net/zhizhen/191.html