重拾C,一天一点点_9-指针与数组
这一章节很重要,一定要多思考、理解!
指针是一种保存变量地址的变量。
通常的机器 都有一系列连续编号或编址的存储单元。一个字节可存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-指针与数组的更多相关文章
- 重拾C,一天一点点_2
类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...
- 重拾C,一天一点点
数据类型及长度 char 字符型,占用一个字节 int 整型,通常代表特定机器中整数的自然长度 short 16位 int 16位或32位 ...
- 重拾C
重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...
- 重拾qt
最近公司又接了一个煤矿的项目,要写个小程序摘取数据,我是公司唯一c++程序员,本来搞ios搞好好的,现在又得重拾半年没摸得qt了.呵呵...呵呵呵. 这里只记录这次小程序的一些小的总结吧.. 1.中文 ...
- CSS魔法堂:重拾Border之——更广阔的遐想
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——不仅仅是圆角
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——图片作边框
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——解构Border
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- 重拾Blog
上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...
随机推荐
- Inno Setup中做补丁通过注册表获取原程序安装目录
今天找VM补丁看到的,是个innosetup封装的,所以习惯性的喜欢去看人家的iss文件是怎么编写的. DefaultDirName={reg:HKLM\SOFTWARE\VMware%2c%20In ...
- Hibernate注解:一对多外键关联
情形:两个表,cms_mode是主表,cms_model_field是子表,cms_model_field的model_id字段关联到cms_model的主键. # # Source for tabl ...
- NYOJ 51-管闲事的小明
点击打开链接 管闲事的小明 时间限制:4000 ms | 内存限制:65535 KB 难度:2 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数 ...
- [ACDream 1430]SETI 后缀数组
题目链接:http://acdream.info/problem?pid=1430 题目大意:给你一个长度不超过10000的字符串,问你出现过两次或两次以上的不重叠的子串有多少个. 后缀数组计算出he ...
- 100. Same Tree(Tree)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tre ...
- convert NameValueCollection/Dictionary<string, object> to JSON string
public static class WebExtension { public static T Decode<T>(this RequestBase res) { Type type ...
- c/c++笔记
string 若要根据字典序比较string类型的大小,只需要用><=就可以啦 例如: string s1="abcz"; string s2="abcd&q ...
- tomcat, jdk, eclipse, ant的安装,设置及常见问题
1.tomcat 安装: 安装版:在官方下载tomcat的安装版,根据提示一步步操作,很简单的 解压版:在官方下载tomcat的解压版,放到要安装的目录中解压版即可 同以前的找到设置环境变量的地方. ...
- Ceph源码解析:PG peering
集群中的设备异常(异常OSD的添加删除操作),会导致PG的各个副本间出现数据的不一致现象,这时就需要进行数据的恢复,让所有的副本都达到一致的状态. 一.OSD的故障和处理办法: 1. OSD的故障种类 ...
- 请添加 MIME 映射
HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 以管理员运行命令:C:\Wind ...