Разве char*
не является единственным допустимым типом аргумента для спецификатора формата %s
, используемого в строке спецификатора формата scanf()
? Если да, то почему в моей программе каждый из них работает одинаково для %s scanf()
и printf()
. описатель формата strong>:
scanf("%s",&list[i]);
scanf("%s",list[i]);
scanf("%s",&list[i][0]);
Буду признателен, если вы устраните следующие недоразумения, вытекающие из этой предпосылки:
1) Почему &name[i]
работает, если он имеет тип char (*)[]
. Разве &name[i][0]
не является единственным допустимым аргументом, поскольку он имеет тип char*
?
2) Превращается ли name[i]
в char*
, когда мы передаем его в качестве аргумента для %s
? Это то же самое, что и передача &name[i][0]
, которая является адресом первого символа каждого имени, которое мы вводим? Почему? оно работает?
#include<stdio.h>
#include<string.h>
int main(void)
{
char list[3][10];
int i;
printf("Enter the three names \n");
for(i=0;i<=2;i++)
scanf("%s",&list[i]); //Why this works?
//scanf("%s",list[i]); //Does it decompose into char* type?
//scanf("%s",&list[i][0]);
for(i=0;i<=2;i++)
printf("%s\n",list+i); //All of these printf() work as well
//printf("%s\n",list[i]);
//printf("%s\n",&list[i][0]);
}