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的各个元素
推荐阅读
-
C语言数组与指针的关系
-
浅谈C#与Java两种语言的比较
-
数据结构与算法 | KMP算法及其改进算法的核心思路 (C语言实现)
-
c语言clock()计时操作(包含函数指针的应用)
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时29:数组与方法
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时26:数组引用传递分析
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时34:对象数组
-
数组指针的定义与使用
-
C语言羁绊之数组长度的求解方式
-
C语言sizeof计算数组长度的问题