3

40篇学完C语言——(第六篇)【指针与数组】

 1 year ago
source link: https://blog.51cto.com/u_15389321/5342416
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

40篇学完C语言——(第六篇)【指针与数组】

原创

xcc_21 2022-05-30 08:06:19 ©著作权

文章标签 数组元素 数组 整型 文章分类 C/C++ 编程语言 阅读数186

通过指针引用数组元素

引用一个数组元素,可以用以下两种方法:
1.下标法,如 a[i] 形式;
2.指针法,如 *(a+i)*(p+i)。其中 a 是数组名,p是指向数组元素的指针变量,其初值为 p=a


栗子1:

有一个整型数组 a,有5个元素,要求输出数组中的全部元素

(1). 下标法

# include<stdio.h>

int main()
{
	int i,a[5];

    printf("Please enter 5 integer numbers:\n");
	for(i=0;i<5;i++)
		scanf("%d",&a[i]);
	for(i=0;i<5;i++)
		printf("%d ",a[i]);
	printf("\n");

	return 0;
}

(2). 通过数组名计算数组元素地址,找出元素的值

# include<stdio.h>

int main()
{
	int i,a[5];

	printf("Please enter 5 integer numbers:\n");
	for(i=0;i<5;i++)
		scanf("%d",&a[i]); // or scanf("%d",a+i)
	for(i=0;i<5;i++)
		printf("%d ",*(a+i));
	printf("\n");

	return 0;
}

(3). 用指针变量指向数组元素

# include<stdio.h>

int main()
{
	int i,a[5],*p;
	p = a; // or  p=&a[0]

	printf("Please enter 5 integer numbers:\n");
	for(i=0;i<5;i++)
		scanf("%d",p+i);
	for(i=0;i<5;i++)
		printf("%d ",*(p+i));
	printf("\n");

	return 0;
}
# include<stdio.h>

int main()
{
	int i,a[5],*p;

	printf("Please enter 5 integer numbers:\n");
	for(i=0;i<5;i++)
		scanf("%d",&a[i]);
	for(p=a;p<(a+5);p++)    // 错误:  for(p=a;a<(p+5);a++)  a 代表数组首元素的地址,是一个指针型常量
		printf("%d ",*p);   //  	      printf("%d ",*a);   
	printf("\n");

	return 0;
}

栗子2:

通过指针变量输出整型数组 a 的5个元素

# include<stdio.h>

int main()
{
	int i,a[5],*p;
	p=a;

	printf("Please enter 5 integer numbers:\n");
	for(i=0;i<5;i++)
		scanf("%d",p++);
	for(i=0;i<5;i++,p++)    // or for(i=0;i<5;i++)
		printf("%d ",*p);   //        printf("%d", *p++);
	printf("\n");

	return 0;
}

结果为:
40篇学完C语言——(第六篇)【指针与数组】_数组
问题出在了指针变量 p 的指向上。指针 p 经过第一轮 for 循环后已经指向了数组 a 的末尾,执行第二个 for 循环时,指向 a 数组下面的10个存储单元,而这些单元中存储的值是难以预料的。

解决办法:

在第二个 for 循环之前加一个赋值语句: p = a


拓展:

while 实现输出数组 a 的前 5 个元素 :

# include<stdio.h>

int main()
{
	int i,a[5],*p;
	p=a;

	printf("Please enter 5 integer numbers:\n");
	for(i=0;i<5;i++)
		scanf("%d",p++);
	p=a;
	while(p<a+5)
		printf("%d ",*p++);

	printf("\n");

	return 0;
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK