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

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

通常的机器 都有一系列连续编号或编址的存储单元。一个字节可存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. golang.org/x/mobile/exp/gl/glutil/glimage.go 源码分析

    看这篇之前,建议先看之前几篇,这几篇是基础. Go Mobile 例子 basic 源码分析 http://www.cnblogs.com/ghj1976/p/5183199.html OpenGL ...

  2. MongoDB相关资料收集

    MongoDB 入门教程http://www.runoob.com/mongodb/mongodb-tutorial.html .net 驱动程序下载:http://mongodb.github.io ...

  3. Unity小厨房之-----背后视角摄像机

    相信每一个接触过Unity的人,应该都认识Unity引擎自带的那个水管工,也一定知道那个小人模型上挂着3个脚本控制着小人的一切,今天我就来说一下关于Unity背后视角摄像机的实现,当然方法并不唯一,这 ...

  4. ORACLE directory 目录--转载

    Create directory让我们可以在Oracle数据库中灵活的对文件进行读写操作,极大的提高了Oracle的易用性和可扩展性.其语法为:CREATE [OR REPLACE] DIRECTOR ...

  5. Perlin Noise 及其应用

    Perlin Noise 可以用来表现自然界中无法用简单形状来表达的物体的形态,比如火焰.烟雾.表面纹路等.要生成 Perlin Noise 可以使用工具离线生成,也可以使用代码运行时生成.最简单常用 ...

  6. JAR包

    1,      使用JAR文件    jar文件的全称是Java Archive File,意思就是Java档案文件,通常jar文件是一种压缩文件,与常见的ZIP压缩文件兼容,通常也被称为jar包,j ...

  7. ionic goto other page or alert

    有时候需要 调试,这是就需要alert 的...可惜的是我不会angular  所以记录一下 .controller('mainctr', function($scope, $window) { $w ...

  8. centreon 降低rrd磁盘读写

    参考 https://documentation.centreon.com/docs/centreon/en/2.7.x/faq/performance.html 修改rrdcached配置 vim ...

  9. 深入了解Qt(二)之元对象系统(Meta-Object System)

    深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! 在Qt Meta Object System-元对象系统这篇文章中,从底层实现的源码剖析了元对象 ...

  10. OpenGL函数解析之gluPerspective()

    函数原型: void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar); 参数说明: fovy:指定 ...