指针与数组的根本区别在于,指针存放的内容是“数据的地址”, 而数组存放的内容,就是数据本身。
访问指针指向的数组时,编译器首先取得指针存放的地址,如果指针有一个下标[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/C++语法详解 - 指针、结构体、类、模板等核心概念 - 动态内存管理与异常处理 - 文件...
8. **第八章:指针** - 指针是C语言的一大特色,本章会讲解指针的声明、赋值、解引用,以及指针与数组、函数的关系。 9. **第九章:结构体与联合** - 介绍复合数据类型,如何定义和使用结构体和联合,以及指针与...
严蔚敏教授是中国计算机科学领域的知名专家,她的教材《数据结构》被广泛使用。在本资源包中,她使用C语言编写代码,并配以动态演示,帮助我们理解每个数据结构和算法的执行过程。C语言是一种底层语言,对内存管理和...
- 二维数组可以通过指针进行遍历,指针数组可以用来存储多个地址。 - 指针与字符串的关系密切,字符串在C语言中本质上是字符数组,可以使用指针进行操作。 - 指针的指针(指针的指针)可以用来处理多级指针,实现更...
在IT行业中,尤其是在C和C++的编程领域,指针是一项至关重要的概念。指针是C和C++语言中的一个核心特性,它允许程序直接访问内存地址,从而提供了对内存的高级控制。对于任何想要深入理解和掌握这两种语言的人来说,...
理解并熟练运用C指针是成为C语言专家的关键步骤,这本"《C与指针的奥秘 经典组合》"将引导读者逐步探索指针的深奥之处,提升编程技能。通过学习,读者不仅可以深入理解C语言的底层机制,还能更好地利用指针解决实际...
【C语言基础教程-谭浩强】是一本深入浅出介绍C语言的教材,由著名计算机教育专家谭浩强编写。这本书是初学者入门C语言的首选,以其清晰易懂的语言和实例丰富著称。PPT形式的教程使得学习过程更为直观和便于理解。 ...
《C语言程序设计-经典教程》是一本专为初学者设计的C语言学习资源,它提供了全面而深入的C语言教学内容,旨在帮助读者理解C语言的基础知识和编程技巧。这个非扫描版非谭的教程可能意味着它并非由知名教师谭浩强编写...
理解和熟练使用指针是成为C语言专家的基础。通过指针,我们可以实现动态内存分配、链表、树等复杂数据结构,以及函数间的复杂交互。在实际编程中,正确理解和运用指针可以大大提高程序的灵活性和性能。
C语言中的指针是编程中的一个关键概念,它在程序设计中起着至关重要的作用。指针是C语言中一种特殊的变量,它存储的是内存地址,即其他变量在内存中的位置。...学习并熟练掌握指针是成为C语言专家的关键步骤。
首先,基础部分的源代码可能包括变量、数据类型、运算符、流程控制(如if-else、switch-case、for、while循环)、函数定义与调用、数组、指针等基本概念的实践应用。例如,通过简单的加减乘除运算程序,你可以理解...
在编程世界中,C++是一种强大的面向对象编程语言,它继承了C语言的特性并引入了许多高级概念。本文将深入探讨C++中的指针和...通过深入学习和实践,你将成为C++指针和多维数组的专家,能够熟练地应用于各种复杂场景。
指针是C语言中实现低级内存操作和高效算法的关键工具,是区分C语言初学者和专家的重要标志。熟练使用指针能够编写出更加灵活、高效且内存管理得当的程序。因此,对于任何想要深入C语言的人来说,理解和掌握指针都是...
学习如何声明、使用和操作指针,以及理解指针与数组、函数的关系,能帮助我们优化内存使用,提高程序效率。同时,了解动态内存分配(malloc、calloc、realloc、free)是解决复杂问题的关键。 3. **数据结构**: 数据...