一维数组&指针

导言:对于一维数组而言,数组作形参↔指针变量作形参,都可以用下标法和指针法来引用数组元素。


1、数组作形参​

?下标法(容易理解)​

地址:&a[i]

元素:a[i]​

?指针法(推荐使用)

地址:a+i​

元素:*(a+i)

?因为编译器将a[i]解释为*(a+i)需要时间,所以直接将a[i]写成*(a+i)可提高执行效率


2、指针变量作形参

?下标法

地址:&p[i]

元素:p[i]

?指针法

地址:p+i

元素:*(p+i)


两个对比

  • p+1?p++
  1. 都不是简单的+1,1指的是1个内存单元
  2. p++↔p=p+1,p的值改变了
  3. p+1并没有改变p的值
  • a?p
  1. a是地址常量
  2. p是地址变量

总结:对于一维数组,

在主函数中,将数组名作为实​参,​

在被调函数中,将数组作为形​参,引用元素用

下标法→便于理​解​

指针法→提高效率

?没必要用到指针变量


示例

数组作形参

1.1 下标法

void InputArray(int a[], int n)   /* 形参声明为数组,输入数组元素值 */
{
	int  i;
	for (i=0; i<n; i++)
	    scanf("%d", &a[i]);       /* 用下标法访问数组元素 */	
}

void OutputArray(int a[], int n)  /* 形参声明为数组,输出数组元素值 */
{
	int  i;
	for (i=0; i<n; i++)
	    printf("%4d", a[i]);      /* 用下标法访问数组元素 */
	printf("\n");	
}

1.2 指针法

void InputArray(int a[], int n)   /* 形参声明为数组,输入数组元素值 */
{
	int  i;
	for (i=0; i<n; i++)
		scanf("%d", a+i);          /* 这里a+i等价于&a[i] */	
}

void OutputArray(int a[], int n)   /* 形参声明为数组,输出数组元素值 */
{
	int  i;
	for (i=0; i<n; i++)
		printf("%4d", *(a+i));     /* 这里*(a+i)等价于a[i] */
	printf("\n");	
}

指针变量作形参

1.3 下标法

void InputArray(int *p, int n)   /* 形参声明为指针变量,输入数组元素值 */
{	
   int i;
	for (i=0; i<n; i++)
		scanf("%d", &p[i]);      /* 形参声明为指针变量时也可以按下标方式访问数组 */       	
}

void OutputArray(int *p, int n)  /* 形参声明为指针变量,输出数组元素值 */
{
	int i;
	for (i=0; i<n; i++)
		printf("%4d",p[i]);      /* 形参声明为指针变量时也可以按下标方式访问数组 */        
	printf("\n");	
}

1.4 指针法

void InputArray(int *p, int n)   /* 形参声明为指针变量,输入数组元素值 */
{	
	int i;
	for (i=0; i<n; i++)
		scanf("%d", p+i);        /* 用指针法访问数组元素 */	
}

void OutputArray(int *p, int n)  /* 形参声明为指针变量,输出数组元素值 */
{
	int i;
	for (i=0; i<n; i++)
		printf("%4d", *(p+i));   /* 用指针法访问数组元素 */
	printf("\n");	
}
发布了23 篇原创文章 · 获赞 7 · 访问量 1990

猜你喜欢

转载自blog.csdn.net/weixin_44641176/article/details/100049448