gpt4 book ai didi

c - 初始化指针时的数据类型警告

转载 作者:太空狗 更新时间:2023-10-29 15:53:30 26 4
gpt4 key购买 nike

我目前正在努力研究 C 中的指针,来自前端开发这不是一项完全容易的工作。我正在关注 this tutorial , 一切运行顺利,直到我尝试编译以下示例:

#include <stdio.h>

int main(int argc, char *argv[]) {
int **ramon;
int *paul;
int melissa = 5;
paul = &melissa;
ramon = &paul;
printf("ramon = %d\n", ramon); // <- warning: format '%d' expects type 'int'...
printf("&paul = %d\n", &paul); // <- warning: format '%d' expects type 'int'...
printf("*ramon = %d\n", *ramon); // <- warning: format '%d' expects type 'int'...
printf("&melissa = %d\n", &melissa); <- warning: format '%d' expects type 'int'...
printf("**ramon = %d\n", **ramon);p1); <- warning: format '%d' expects type 'int'...
return(0);
}

从 printf 的第一行我得到这个错误:“警告:格式 '%d' 需要类型 'int',但参数 2 的类型为 'int **'”

我认为这与我初始化指针的方式有关,但站在陡峭的学习曲线的底部,我不知道如何进步。出了什么问题,如何初始化指针以避免警告?

最佳答案

您的指针初始化看起来是正确的。问题是您正在尝试使用 %d 打印 int** 类型的变量(即“指向 int 的指针的指针”) 用于 int 值的格式说明符。

打印int

如果你想打印 melissa 的值(即 5),这实际上是 ramon 间接指向的值,你需要取消引用指针值正确的次数。

取消引用指针是通过 * 运算符完成的,它本质上意味着“该指针指向的值”。

  • 取消引用一次(即 *ramon)将获得 ramon 指向的 int* 值。
  • 第二次对其取消引用将获得取消引用的 int* 值指向的 int 值。
  • 您可以像这样将取消引用运算符链接在一起以获得您想要的:

    printf("ramon = %d\n", **ramon);

打印指针值

如果要打印指针(即内存位置)值,可以使用 %p 格式说明符。这将以十六进制打印内存地址:

printf("ramon = %p\n", ramon); // Print the "pointer to the pointer to melissa"
printf("ramon = %p\n", *ramon); // Print the "pointer to melissa"

关于c - 初始化指针时的数据类型警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455766/

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