3
40篇学完C语言——(第六篇)【指针与数组】
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语言——(第六篇)【指针与数组】
原创通过指针引用数组元素
引用一个数组元素,可以用以下两种方法:
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;
}
结果为:
问题出在了指针变量 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;
}
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK