scanf 将特定类型的数据读取到作为第二个、第三个、第四个等参数传递的地址中。
int var;
scanf("%d",&var);
Here var
是值并且&var
是地址。上面的声明说:读%d
(整数)数据类型&var
地址。
char s[20];
scanf("%s",s);
Here 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]); // reading each time single integer value starting index with 0 and ending index MAX-1.
}
}
没有单一的格式说明符可以像在 %s 的帮助下一次扫描一组字符那样一次扫描一组整数。
和这里a=&a[0];
您可以直接扫描单个整数值到所指向的地址a
.
scanf("%d",a);
printf("a[0]=%d\n",a[0]);
如果你输入10
然后打印a[0]=10
.
指针的用法:
如果您使用如下所示的指针,那么您将了解如何递增指针并将值放入数组的不同位置。
您可以移动指针位置来读取数组。您可以在不移动指针位置的情况下读取数组。
-
通过移动指针位置读取数组
#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++; //moving pointer
}
}
-
读取数组而不移动指针位置。
#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); //we are not moving ptr position we scaning each time into next location by incrementing i
}
}
当指针递增时,增量取决于指针的类型。这里ptr
是一个整数指针,所以ptr+1
将增加ptr+sizeof(int)
地点。
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]; //initializes the pointers
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); //each time you will move like 00 01 02 03 04 and second time 10 11 12 13 14 and so on...
//printf("%u or %x",pointer[i]+j,pointer[i]+j);//un comment this line and see the addresses how the address incrementing for each element
}
}
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]); //we can't do like this a++ or ++a or a+i this is illegal in C. for that purpose we are using pointers
}
}
您会在以下位置找到上述大部分内容《C 编程语言》(第二版),作者:Brian W. Kernighan 和 Dennis M. Ritchie https://stackoverflow.com/tags/c/info.