这一章节很重要,一定要多思考、理解!

指针是一种保存变量地址的变量。

通常的机器 都有一系列连续编号或编址的存储单元。一个字节可存char类型,两相邻字节存储单元可存一个short,依此类推。

  p = &c;  //将c的地址赋值给p,即p是指向c的指针。

地址运算符&只能应用于内存中的对象,即变量与数组元素,不能作用于表达式、常量或register类型的变量。

 #include <stdio.h>
main(){
int x = , y = ,z[];
int *ip; //ip是指向int类型的指针
ip = &x; //ip指向x
y = *ip; //y=1
printf("%d\n",y); //
*ip = ; //x=0
printf("%d\n",x); //
printf("%d\n",y); //
ip = &z[]; //ip指向z[0]
printf("%d\n",ip); //2686720 数组z的第一个元素的地址的值
}
 #include <stdio.h>
main(){
int x = , y;
int *ip;
int *z;
ip = &x;
printf("%d\n", *ip); //
y = *ip + ;
printf("%d\n",y); //
*ip += ;
printf("%d\n",*ip); //
printf("%d\n",(*ip)++); //
printf("%d\n",++(*ip)); //
z = ip; //指针z也指向ip所指向的对象
printf("%d\n", *z); //
}
 #include <stdio.h>

 main(){
int i;
int a[];
int *p;
p = &a[];
printf("%d\n", &i); //
printf("%d\n", a); //
printf("%d\n", &a[]); //
printf("%d\n", &a[]); //2686720 int按4字节算,&a[8] = 2686720 + 8 * 4
printf("%d\n", p); //2686720
}

指针只能指向某种特定类型的对象,即每个指针都必须指向某种特定的数据类型。有一例外,void 类型的指针可存放指向任何类型的指针,但不能间接引用其自身。

//交换两值

 #include <stdio.h>
void swap(int *px, int *py);
main(){
int i = , j = ;
printf("%d,%d\n", i, j); //1,2
swap(&i, &j);
printf("%d,%d\n", i, j); //2,1
}
void swap(int *px, int *py){
int temp;
temp = *px;
*px = *py;
*py = temp;
}

一般来说,用指针编写的程序比用数组下标编写的程序执行速度要快。

int a[10];        //定义一个由10个对象组成的集合,这10个对象存储在相邻的内存区域中 ,分别为a[0] 、a[1]...
int *p;
p = &a[0];            //将指针p指向数组第一个元素,p的值是数组元素a[0] 的地址     
//如果p指向数组中的某个特定元素,则p+1将指向下一个元素,p+i将指向p所指向数组元素之后的第i个元素。
//p指向a[0] ,*(p+1)引用的是数组元素a[1]的内容,*(p+i)=a[i]。
p = &a[0]; => p = a(数组名所代表的就是该数组的第一个元素的地址) => a[i] = *(a+i) => &a[i] = a+i

有点困,有点饶晕了,今晚学的有点少了,明天继续。晚安!

原文作者:lltong

博客园地址:http://www.cnblogs.com/lltong/

重拾C,一天一点点_9-指针与数组的更多相关文章

  1. 重拾C,一天一点点_2

    类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...

  2. 重拾C,一天一点点

    数据类型及长度 char        字符型,占用一个字节 int          整型,通常代表特定机器中整数的自然长度 short       16位 int         16位或32位 ...

  3. 重拾C

    重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...

  4. 重拾qt

    最近公司又接了一个煤矿的项目,要写个小程序摘取数据,我是公司唯一c++程序员,本来搞ios搞好好的,现在又得重拾半年没摸得qt了.呵呵...呵呵呵. 这里只记录这次小程序的一些小的总结吧.. 1.中文 ...

  5. CSS魔法堂:重拾Border之——更广阔的遐想

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  6. CSS魔法堂:重拾Border之——不仅仅是圆角

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  7. CSS魔法堂:重拾Border之——图片作边框

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  8. CSS魔法堂:重拾Border之——解构Border

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  9. 重拾Blog

    上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...

随机推荐

  1. 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制

    转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...

  2. 算法库:clapack安装配置

    类似于opencv.jpeglib和pnglib的安装配置. opencv安装配置见:http://www.cnblogs.com/dzyBK/p/4954945.html jpeglib和pngli ...

  3. HDU 4081 Qin Shi Huang's National Road System [次小生成树]

    题意: 秦始皇要建路,一共有n个城市,建n-1条路连接. 给了n个城市的坐标和每个城市的人数. 然后建n-2条正常路和n-1条魔法路,最后求A/B的最大值. A代表所建的魔法路的连接的城市的市民的人数 ...

  4. Oracle Profile 使用详解--zhuanzai

    一.目的: Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该prof ...

  5. OC基础(19)

    类扩展(Class Extension) Block基本概念 typedef和Block Block注意事项 *:first-child { margin-top: 0 !important; } b ...

  6. 你不知道的JavaScript 二

    词法作用域 上次说到作用域,将其定义为一套规则,这套规则用来管理引擎如何在当前作用 域以及嵌套的子作用域中根据标识符名称进行变量查找. 作用域共有两种主要的工作模型.第一种是最为普遍的,被大多数编程语 ...

  7. (转)直接拿来用!最火的iOS开源项目(一)

    1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...

  8. 关于codeblocks调试错误

    对于出血编程者,当代码有错误时,可能大家一般都是在程序的变量操作之后输出变量的值,但是这种方法较麻烦,工作量较大,也无法很快的找出错误,因此运用编程软件调试错误就显得尤为重要,刚才写啦一个代码,运用直 ...

  9. windows Android开发环境快速搭建和部署

    windows安装Android的开发环境相对来说比较简单,本文写给第一次想在自己Windows上建立Android开发环境的朋友们,为了确保大家能顺利完成开发环境的搭建,文章写的尽量详细,希望对初级 ...

  10. Battery-historian 参数说明

    部分参数说明 battery_level 电量,可以看出电量的变化.比如上图中的数据显示刚开始电量是100%,然后在第11秒-12秒中间的某个时刻降到了99%. plugged 充电状态,这一栏显示是 ...