scanf函数可以将特定类型的数据读入作为第二、第三、第四等参数传递的地址中。
int var;
scanf("%d",&var);
这里的
var
是值,
&var
是地址。上述语句表示:将
%d
(整数)类型数据读入到
&var
地址中。
char s[20];
scanf("%s",s);
这里的s
是地址而不是值,因为s
是字符数组(字符串)。数组名称本身就表示其地址。 s == &s[0],它们是相同的。
上述语句的意思是:从s
开始,将%s
(字符数组)类型的数据读入地址位置。
#include<stdio.h>
#define MAX 5
int main()
{
int a[MAX];
int i;
printf("Enter Values of array\n");
for(i=0;i<MAX;i++)
{
printf("Enter a[%d] = ",i);
scanf("%d",&a[i]);
}
}
没有单一的格式说明符可以一次扫描一组整数,就像用%s一次扫描一组字符那样。
而在这里a=&a[0];
,你可以直接将单个整数值扫描到由a
指向的地址。
scanf("%d",a);
printf("a[0]=%d\n",a[0]);
如果您输入10
,则打印a[0]=10
。
指针的使用:
如果按照下面所示使用指针,则可以了解如何递增指针并将值放入数组的不同位置。
您可以移动指针位置以读取数组。您可以在不移动指针位置的情况下读取数组。
Reading arrays by moving pointer locations
#include<stdio.h>
#define MAX 5
int main()
{
int a[MAX];
int i;
int *ptr;
ptr = &a[0];
printf("Enter Values of array\n");
for(i=0;i<MAX;i++)
{
printf("Enter a[%d] = ",i);
scanf("%d",ptr);
ptr++;
}
}
Reading arrays with out moving pointer locations.
#include<stdio.h>
#define MAX 5
int main()
{
int a[MAX];
int i;
int *ptr;
ptr = &a[0];
printf("Enter Values of array\n");
for(i=0;i<MAX;i++)
{
printf("Enter a[%d] = ",i);
scanf("%d",ptr+i);
}
}
When a pointer is incremented then the increment is dependent on the type of pointer. Here ptr
is an integer pointer so ptr+1
will increment ptr+sizeof(int)
locations.
int a[5][5];
这是一个二维数组,所以你需要5个指针来扫描,因此我声明了指针数组。
#include<stdio.h>
#define MAX 5
int main()
{
int a[MAX][MAX],i,j;
int *pointer[MAX];
for(i=0;i<MAX;i++)
pointer[i]=&a[i][0];
printf("Enter elements :\n");
for(i=0;i< MAX;i++)
{
for(j=0;j<MAX;j++)
{
printf("Enter the a[%d][%d] element: ",i,j);
scanf("%d",pointer[i]+j);
}
}
printf("The Given Matrix:\n\n");
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
printf("%d",*(pointer[i]+j));
printf("\t\t");
}
printf("\n\n");
}
}
直接扫描
printf("Enter elements :\n");
for(i=0;i< MAX;i++)
{
for(j=0;j<MAX;j++)
{
printf("Enter the a[%d][%d] element: ",i,j);
scanf("%d",&a[i][j]);
}
}
你可以在
Brian W. Kernighan 和 Dennis M. Ritchie 的《C程序设计语言》(第二版) 中找到大部分以上内容。