В последнее время я изучаю код программирования. Я застрял здесь, имея дело с двумерными строками и указателями. Кроме того, функции printf(), putchar() и puts() запутывают! Пожалуйста, помогите мне со следующим фрагментом:C Строки, указатели, штрихи
#include<stdio.h>
int main()
{
char wer[3][4]= {"bag", "let", "bud"};
char (*ptr)[4]=wer;
printf("%d %d %d\n",ptr, ptr+1, ptr+1); // points to bag, let and bud respectively
printf("%d %d %d\n",wer, wer+1, wer+1); // points to bag, let and bud respectively
printf("%d %d %d\n", (*ptr), (*ptr+1), (*ptr +2)); // points to b,a,g respectively
printf("%s\n",*(ptr+1)); //prints let
printf("%s\n", (ptr+1)); //prints let
printf("%s\n", (*ptr +1)); //prints ag
puts(*(ptr+1)); //prints let
//puts((ptr+1)); //gives error
puts((*ptr+1)); //prints ag
putchar(**(ptr+1));//prints l
putchar(*(*ptr +1));//prints a
return 0;
}
Я хочу знать, почему *(ptr+1)
и (ptr+1)
как работа для printf
в то время как (ptr+1)
дает ошибку для puts
. Также я знаю, что putchar
принимает целочисленный аргумент. Почему мы используем двойной указатель здесь?
напечатайте указатели, используя '% p' –
Кроме того, я прошу вас перечитать man-страницы и дважды проверить поставляемые типы данных. :) –
«дает ошибку»: какая ошибка? –