`
evasiu
  • 浏览: 165395 次
  • 性别: Icon_minigender_2
  • 来自: 广州
博客专栏
Fa47b089-e026-399c-b770-017349f619d5
TCP/IP详解卷一>阅读...
浏览量:12256
社区版块
存档分类
最新评论

C专家编程--指针与数组

阅读更多

指针与数组的根本区别在于,指针存放的内容是“数据的地址”, 而数组存放的内容,就是数据本身。

 

访问指针指向的数组时,编译器首先取得指针存放的地址,如果指针有一个下标[I],就把指针的内容加上作为地址,从该地址中取数据。

而访问数组a时,a就是存放数据的地址,编译器直接从该地址中取数据,如果数组有一个下标[I],就把该地址加上I作为地址,从该地址中取数据。

也就是说,访问指针比访问数组多了一个获取地址的过程。

 

另外,数组和指针都可以在它们的定义中用字符串进行初始化,尽管看上去一样,底层的机制却不同。

定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义时同时赋给指针一个字符串常量:

char *p = "this is read only string";    //该字符串常量存放于可执行文件的只读数据区

char a[] = "this string can be modified";    //编译器将在堆栈中为a分配存储空间。

 

什么时候数组和指针是相同的?

C语言标准:

1. 表达式中的数组名(与声明不同)被编译器当作一个指向该数组每一个元素的指针

2. 下标总是与指针的偏移量相同

3. 在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针

 

(1) “表达式上的数组名“就是指针

假设有如下声明:

int a[10], *p, i=2;

我们可以通过下面任何一种方法来访问a[i]:

p = a;

p[i];

 

p=a;

*(p+i);

 

p=a+i;

*p;

 

(2) 在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针(因为如果拷贝整个数组的话无论是内存还是时间都是一个很大的开销)

 

int array[100], array2[100];

 

main(){

    array[1] = 3;

    *arr = 3;

    array = array2;     //不合法,因为array是一个数组名,而数组名是不可修改的左值。

 

//但是

 

fun( int arr[] ){

    arr[1] = 3;

    *arr = 3;

    arr = array2;   //合法,因为arr实际上是一个指针

 

 

 

 

 

分享到:
评论

相关推荐

    怎么学习C语言.看过来

    那该如何学C语言呢?希望我整理的 C语言的学习路线,能对你有帮助!...对C语言有一定认知之后,就可以通过《C和指针》和《C专家编程》以及《C陷阱与缺陷》等高阶图书学习C语言中最重要的指针等内容了。

    C语言编程精彩百例(附原书源代码)

    实例48 结构体指针数组 实例49 共用体变量 实例50 枚举类型 实例51 读写字符 实例52 读写字符串 实例53 格式化输出函数 实例54 格式化输入函数 实例55 打开和关闭文件 实例56 fputc()和fgetc() 实例57 ...

    怎么学习C语言呢?这篇告诉你学习路径

    那该如何学C语言呢?希望我整理的 C语言的学习路线,能对你有帮助!...对C语言有一定认知之后,就可以通过《C和指针》和《C专家编程》以及《C陷阱与缺陷》等高阶图书学习C语言中最重要的指针等内容了。

    C程序设计语言(第2版·新版中文)

    全面、系统地讲述了C语言的各个特性及程序设计的基本方法,包括基本概念,类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口、标准库等内容。 目录   出版者的话 专家指导委员...

    C语言入门经典(第4版)--源代码及课后练习答案

    Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。IvorHorton还著有关于C、C++和Java的多部入门级好书,如《C语言入门...

    你必须知道的495个C语言问题.pdf

    Steve Summit,著名的C语言专家。Usenet C FAQ的创始人和维护者,有近30年的C编程经验。毕业于麻省理工学院。他曾在华盛顿大学教授C语言课程多年。除本书外,他还与人合著了C Unleashed一书。 编辑推荐 全球C语言...

    你必须知道的495个C语言问题(PDF)

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 作者介绍:Steve Summit,著名的C语言...

    你必须知道的495个C语言问题完整版本

    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。  《你必须知道的495个C语言问题》结构...

    C程序设计语言(第2版_新版)习题解答.pdf

    内容简介 本书对Brain W. Kernighan和Dennis M. Ritchie所著的《The C Programming Language》(第2版)的所有练习题都进行了解答。...第5章 指针与数组 第6章 结构 第7章 输入与输出 第8章 UNIX系统接口

    基于Symbian OS的手机开发与应用 part1

    while循环1.6.3 for循环1.6.4 跳转语句1.7 其他数据类型1.7.1 数组1.7.2 枚举1.7.3 结构1.8 指针1.8.1 指针的基本概念1.8.2 数组的指针1.8.3 指针数组1.8.4 结构指针变量1.9 函数1.9.1 实现函数1.9.2 指针类型作为...

    Tcl_TK编程权威指南pdf

    第44章 c语言编程与tcl 基本概念 创建可加载软件包 一个用c语言实现的命令过程 blob命令的例于 字符串与国际化 tolmain和tcl-applnit tk_main 事件循环 从c中调用脚本 第45章 编译tci及扩展模块 标准...

    基于Symbian OS的手机开发与应用 part3

    while循环1.6.3 for循环1.6.4 跳转语句1.7 其他数据类型1.7.1 数组1.7.2 枚举1.7.3 结构1.8 指针1.8.1 指针的基本概念1.8.2 数组的指针1.8.3 指针数组1.8.4 结构指针变量1.9 函数1.9.1 实现函数1.9.2 指针类型作为...

    基于Symbian OS的手机开发与应用 part2

    while循环1.6.3 for循环1.6.4 跳转语句1.7 其他数据类型1.7.1 数组1.7.2 枚举1.7.3 结构1.8 指针1.8.1 指针的基本概念1.8.2 数组的指针1.8.3 指针数组1.8.4 结构指针变量1.9 函数1.9.1 实现函数1.9.2 指针类型作为...

Global site tag (gtag.js) - Google Analytics