数组和指针的问题
2016-02-28 21:58
169 查看
对于一段程序,处理器先进行编译再运行。无论变量原先是定义为指针还是数组,编译器都会根据声明提取变量的类型地址信息。接着再根据地址访问数组或者指针。
定义声明为数组,用数组访问:
char a[6]="asdfgh";
c = a[1];
伪代码是:取a的值 ; //编译器知道a是一个地址常量,所以a的值就是一个地址
然后将a的值加上偏移量1,得到一个新的地址;
取新地址的值赋给c;
定义声明为指针,用指针访问:
char * a="asdfgh";
c = a[1];
伪代码是:取a的值 ; //编译器知道a是一个指针变量,所以a的值就是a的内容,即一个指向字符的地址
然后将a的值加上偏移量1,得到一个新的地址;
取新地址的值赋给c;
可见不论是访问定义声明的数组还是定义声明的指针,c = ‘d’。
当定义为数组,声明为指针,访问时就会出现问题
a[]为一个外部数组,
extern char *a;
c = a[1];
伪代码是:取a的值 ; //编译器认为a是一个指针变量,所以a的值就是a的内容,a的内容是a[0],是字符a,将会把a作为一个指向字符的地址来用,显然是错误的。
然后将a的值加上偏移量1,得到一个新的地址;
取新地址的值赋给c;
地方
定义声明为数组,用数组访问:
char a[6]="asdfgh";
c = a[1];
伪代码是:取a的值 ; //编译器知道a是一个地址常量,所以a的值就是一个地址
然后将a的值加上偏移量1,得到一个新的地址;
取新地址的值赋给c;
定义声明为指针,用指针访问:
char * a="asdfgh";
c = a[1];
伪代码是:取a的值 ; //编译器知道a是一个指针变量,所以a的值就是a的内容,即一个指向字符的地址
然后将a的值加上偏移量1,得到一个新的地址;
取新地址的值赋给c;
可见不论是访问定义声明的数组还是定义声明的指针,c = ‘d’。
当定义为数组,声明为指针,访问时就会出现问题
a[]为一个外部数组,
extern char *a;
c = a[1];
伪代码是:取a的值 ; //编译器认为a是一个指针变量,所以a的值就是a的内容,a的内容是a[0],是字符a,将会把a作为一个指向字符的地址来用,显然是错误的。
然后将a的值加上偏移量1,得到一个新的地址;
取新地址的值赋给c;
地方
相关文章推荐
- 散列表的学习和探讨(算法导论第11章)
- js的几种循环语句
- 加权GN算法的Java实现
- [ 转载 ] javascript 闭包详解
- pthread库实现一个简单的任务池
- 《大型网站技术架构》笔记(三)
- 超级简单的Android Studio jni 实现(无需命令行)
- java变量初始化顺序
- Data Structures And Problem Solving Using Java (Fourth Edition)中译版(Java 多态篇)
- 常用oracle数据库命令
- Android学习资料
- JavaScript函数表达式
- 3-2-进制转换-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- Two Sum [leetcode 1]
- js实现弧形菜单特效
- 欢迎使用CSDN-markdown编辑器
- Android笔记---Handler机制
- ListView的优化(二步骤)
- iOS制作自己的静态库(即.a文件)
- centos7上源码安装mysql5.7.11