gpt4 book ai didi

C 字符串、指针、Put

转载 作者:行者123 更新时间:2023-11-30 17:00:18 28 4
gpt4 key购买 nike

我最近一直在研究C语言编程的代码。我在处理二维字符串和指针时被困在这里。另外,函数 printf()、putchar() 和 Puts() 也很令人困惑!请帮我解决以下代码片段:

#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 采用整数参数。为什么我们在这里使用双指针?

最佳答案

您的ptr变量的类型为char (*)[4] (指向 char 数组的指针)。 puts的原型(prototype)是:

int puts(const char *s);

因此,正如您的编译器可能所说的那样,puts期望指向 char 的指针但你给出了类型 char (*)[4] 的参数.

I want to know why do *(ptr+1) and (ptr+1) both work for printf while (ptr+1) gives an error for puts.

调用 printf 时不会检查参数类型(可能是因为 printf 采用可变参数)。添加-Wall在你的CFLAGS添加更多警告,您的编译器应该发出有关此的警告。

Also I know that putchar takes an integer argument. Why do we use double pointer here?

您取消引用ptr两次获得 char (您也可以执行 (*ptr)[1] )。这个char隐式转换为 int当你调用 putchar 时。

关于C 字符串、指针、Put,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37695698/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com