指针和数组要深入理解


Posted on November 28, 2013


一直忙于干活,很多知识都遗忘了,遇到一段代码,发现自己的基础太令人捉急了,代码类似于:

main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int *ptr = (int *)(&a + 1);
    printf("%d %d" , *(a + 1), *(ptr - 1));
}

结果应该是2 5,原因在于(int*)(&a+1)这里。


2013/12/10 22:51 update:

指针和数据很多时候混用,但不代表两者相同,另外,很重要的一点,如果一个数组声明为指针时,定为成数组时,如下:

extern int *a;//声明

int a[0] = {0,1};//定义

在使用extern的文件中,若使用a[0]的方式来访问,就会出现错误,原因是编译以声明作为编译的依据,定义可以看作是一种特殊的声明,是分配内存,甚至初始化的功能。用指针去访问数组,存在二次寻址的过程,但是例子中的指针a并不存在一个额外的内存地址用来存放指针变量,所以编译器会把a[0]翻译为,先从a的内容中取内容0,再去寻找存放在地址0内的内容,这显然是不正确的,找不到地址为0的内存。


标签:C语言

其它推荐日志:

javascript中的parseInt

如何理解LPCTSTR

可恶的EditPlus!?

找到一个不错的blockquote样式

.net2005发布网站报错问题(类型webusercontrol同时存在于...和...中)

SyntaxHighlighter, a fully functional self-contained code syntax highlighter!

Word中的字体大小(几号-几磅)

Vista 及 Windows 2008 server安装后的删除

测智商

PHP 文件上传

c#链接数据库的问题

运行时修改Web.config中的元素值

安装SQL Server 2005开发版时出现性能计数器要求安装错误

aspnet遇到的乱码问题!

在javascript中设置body的onload事件

c#中String跟string的“区别”

关于 xxxx.exe 中的 0xxxxxxxx 处最可能的异常: 0xC0000005: 读取位置 0xxxxxxxx 时发生访问冲突

Vista技巧:禁用Vista中的移动中心

系统进程列表(转)

逗号表达式

细说HTML元素的ID和Name属性的区别

PHP时间函数

无法启动World Wide Web Publishing服务的解决方法

开始→运行→命令集锦

Word中如何自动生成目录

对select标签的误解!

datalist分页的方法

软件项目版本号的命名格式

关于ASP.NET中Request.QueryString的乱码问题

24 个漂亮的个性化 HTML 表单技术

复制表格:Table2Clipboard 0.0.2.4

庞大的java流处理

Stunnel+CCProxy实现加密代理

买神舟笔记本需要注意的几点

FLASH连接数据库

必须学会的几个网络测试命令

搜集几个免费ASP空间,不能保证其时效性,仅供参考实践用!

java读取xml文件的四种方法

fatal error C1853

动态创建GridView的列 ( 转载 )


Search
最新评论
推荐日志
微信扫一扫