欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言数组与指针的关系

程序员文章站 2024-02-29 18:18:10
...

C语言指针与数组的关系

1.什么是数组

创建一个数组

int a[10]; 

此操作表示创建一个可以存10个int型变量的数组a,而变量a实际上就是一个指针,它指向的是数组a首元素的首地址(也就是指向a[0]的首地址),我们通过a[1],a[2]…去寻找相应元素,实际上就是通过加上它距离首元素的偏移量,去找到相应位置的元素,因此a[3]=a+3=[3]a;但是我们默认使用a[3]来表示。

函数参数中的数组

int fun(int a[],int n)
//或者
int fun(int a[10])

数组名作形参时,此时对编译器来说该数组名就是一个指针,形参给出数组长度,则指针只需要移动给出的长度执行程序即可,而使用数组作为形参的写法,在实参到形参的传递过程中,实参需要拷贝到形参中,这样既占用了内存,又多花费了时间,不利于写出高效的代码。在一般的操作时,都才用第一种写法,传递一个数组和它所对应的长度。(字符串存在结束符则不用传递长度)。

2.什么是指针

指针是指向地址的一类变量,它也是一个变量,它所存的值,就是该类型变量的首地址,因此在同一台电脑上,所有指针变量的大小都应该是一样的。

1.指针类型

指针类型是一种新的类型,常见的类型有整形(int),用来存放整数;字符型(char),用来存放字符或字符串;浮点型(float),用来存放浮点型数据,比如小数。而指针类型是一种与他们独立的新类型,它存放的是各种数据存放的地址。它的格式为:类型 *,(*为间接访问运算符/解引用指针)

2.常见的指针类型

int *a;//定义一个指向int变量首地址的指针
double *b;//定义一个指向double变量首地址的指针
char *c;//定义一个指向char型变量首地址的指针

3.指针与数组的联系

*之前提到数组例如a[10]就表示指针a指向一个可以存10个int型变量的数组的首元素的首地址,而int p;则表示定义一个可以指向int型变量首地址的指针p,而这个指针当然可以指向一个数组的首元素的首地址,此时p也就指向了该数组,所以此时的a[1]也就等价于p[1]。此外我们也可以用malloc的方法,动态的为指针p指向的单元开辟空间,达到数组的目的。

int a[10];
int *p;
p=a;//此时p也指向的数组a的首元素的首地址
for(int i=0;i<10;i++)
	printf("%d",p[i]);//利用p同样可以访问数组的a的各个元素