一、什么时候数组和指针是相同的
1、表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针
因此如a[i]这样的访问都被编译器改写或解释为*(a+i)的形式,同样取下标操作符的操作数是可交换的,所以a[3]可以写成3[a],不过通常你不会这样做。
2、下标总是与指针的偏移量相同,下标*sizeof(元素类型)就是偏移数组起始地址的实际字节数。
3、“作为函数参数的数组名”等同于指针,任何传递给函数的数组参数都会被转换成指针,这是基于效率考虑,避免了数组的拷贝。在函数内部,数组参数都将被转换成一个指针,要牢记这一点,因此如:
<!---->void test(char a[10])
{
printf("%d\n",sizeof(a));
}
显然应该打印指针大小4,而非数组大小。另外,注意数组参数的地址跟数组参数第一个元素的地址并不相等,在表达式中两者一致,但是在函数调用中,由于数组参数指针也是临时变量,因此两者的地址是不一样的。
可以通过下列程序观察:
<!---->#include <stdio.h>
#include <stdlib.h>
void test1(char a[])
{
printf("&a=%x,&(a[0])=%x,&(a[1])=%x\n",&a,&(a[0]),&(a[1]));
}
void test2(char *b)
{
printf("&b=%x,&(b[0])=%x,&(b[1])=%x\n",&b,&(b[0]),&(b[1]));
}
int main(int argc, char *argv[])
{
char ga[]="hello";
printf("&ga=%x,&(ga[0])=%x,&(ga[1])=%x\n",&ga,&(ga[0]),&(ga[1]));
test1(ga);
test2(ga);
system("pause");
return 0;
}
二、指针跟数组什么时候不同
1、如果定义了一个数组,在其他文件对它进行声明也必须声明为数组,定义和声明必须匹配,指针也是如此。
2、指针始终是指针,它绝不可以写成数组。可以用下标形式访问指针的时候,一般都是指针作为函数参数时,并且你知道传递给函数的实际是一个数组。
3、数组名是不可改变的左值,因此如
<!---->int array[100],array2[100];
array=array2;
array++;
array--;
都将出错,但是在函数内部:
<!---->int array2[100];
void fun(int array[])
{
array=array2;
}
却可以,因为在函数内部array虽然被声明为数组实际上却是指针。
分享到:
相关推荐
3. **数组与指针的关系** - **数组名作为指针**:在很多情况下,数组名可以被视为指向数组首元素的指针。例如,`int *p = a`等同于`int *p = &a[0]`。 - **指针运算**:可以使用指针运算符对指针进行加减操作,如`...
在C语言程序设计中,指针和数组是两种...熟练掌握指针与数组的交互,对于编写高效的C语言程序至关重要。在编程时,灵活运用这两种工具,可以实现诸如动态数组、链表等更复杂的数据结构,从而提高代码的灵活性和性能。
指针与指针数组也是常见的组合,指针数组可以存储一系列的指针,这样可以方便地管理和操作一组对象。例如,`int *ptrs[10];`定义了一个可以存储10个整型指针的数组。 最后,要特别注意指针的生命周期和空指针。未...
本教学资源“jidao-chap9 指针与数组(2017).ppt”显然是一个关于这两部分知识的详细讲解,适合C语言初学者和进阶者学习。 首先,我们来深入理解一下指针。指针在C语言中扮演着特殊的角色,它是一个变量,但存储的...
需要注意的是,字符指针数组(char* arrayName[length])可以存储多个字符串的首地址,而其他类型的指针数组需要根据具体情况来声明。 5. 指针与字符串 C语言中表示字符串有两种方式:字符数组和字符串常量。字符...
1. 使用指针数组来实现三整数的排序。 ```c void swap(int *pt1,int *pt2){ int temp; temp=*pt1; *pt1=*pt2; *pt2=temp; } void exchange(int *q1,int *q2,int *q3){ if(*q1<*q2)swap(q1,q2); if(*q1<*q3)...
指针与数组的转换也是C语言中的常见操作。数组名在很多情况下可以被视为指向数组首元素的指针,但需要注意的是,数组不是指针,它们在内存中是一段连续的空间。而指针可以被赋值、传递给函数或动态调整其指向的内存...
浅析C语言中指针与数组 本文旨在浅析C语言中指针与数组的概念、特征和应用。指针是C语言中的精华,正确灵活的应用指针,能动态的分配内存,有效的表示复杂的数据结构,方便的使用数组。指针极大丰富了C语言的功能。...
该资源是关于整型指针与数组的PPT学习教案,共45页,涵盖了指针变量、指针与数组、scanf与指针、指针与赋值等知识点。 knowledge point 1: 指针变量 ------------------------- * 指针变量是一种特殊的变量,用于...
从给定的文件信息来看,主要讨论了C++中指针与数组的使用,特别是如何通过指针操作数组元素以及多维数组中的指针应用。下面将详细解析这些知识点: ### 指针与一维数组 #### 一、数组名作为指针 在C++中,数组名...
因此,可以使用数组指针和指针数组两种方法来处理二维数组和指针的关系。 数组指针是一种特殊的指针,它指向一个一维数组或多个维度的数组。通过定义一个数组指针,并给它赋值一个二维数组的首地址,我们能够通过...
理解数组指针和指针数组的差异,可以帮助学生更加深入地理解数组的内部结构和指针的操作方式。通过实践和示例代码的讲解,学生可以逐步掌握如何使用指针来处理数组,以及如何在数组中运用指针变量来达到编程的目的。...
指针与数组的关系 指针和数组是 C 语言中两个非常重要的概念,它们之间存在着密切的关系。利用这种关系,可以增强处理数组的灵活性,加快运行速度。 1. 指针与数组的关系 指针变量可以指向数组名,使得指针变量...
理解指针与数组之间的关系对于深入掌握这两种概念至关重要。下面将详细阐述指针与数组的指向问题,以及如何在实际编程中正确地运用它们。 首先,数组在内存中是一个连续的存储空间,用于存放相同类型的数据。数组名...
### 指针数组与数组指针的概念及区别 在计算机编程中,特别是C语言及其衍生语言中,指针是一个非常重要的概念。它允许程序员直接访问内存地址,并对其进行操作。当我们深入探讨指针时,会遇到两个看似相似但实际上...
本文将详细解析指针数组和数组指针的概念,以及它们在访问二维数组时的区别。 首先,我们要明确两个定义: 1. **指针数组**:这种结构是一个数组,其每个元素都是一个指针。例如,`int *parr[5]` 定义了一个包含5...
在实验7中,你可能会遇到各种指针和数组的操作,包括动态内存分配(如`malloc`、`calloc`、`realloc`和`free`),多维数组,指针数组,以及使用指针处理字符串。理解指针与数组的相互作用,能帮助你更有效地实现数据...
它允许我们把函数作为另一个函数的参数,或者将函数赋值给变量,从而实现回调函数和函数指针数组等功能。 总的来说,C语言中的指针与数组相互交织,提供了丰富的内存管理和数据操作方式。理解这些概念并熟练运用,...