c - 打印内存位置时 Printf 产生警告但仍在 xcode 中编译和运行

标签 c xcode pointers printf

我是 C 编程的新手,正在尝试处理指针和数组。我有一个菜鸟问题想请大家帮我理解。

我正在使用 Xcode 来运行我正在编写的一个非常简单的 C 程序。为了帮助我理解它是如何工作的,我从一个非常基本的程序开始,然后慢慢构建它以帮助学习。这是我的示例代码:

#include "stdio.h"

int main(){

    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    int *p = &a[0];

    printf("Address of first element of a = %d\n", p);
    printf("Number of elements in array = %lu\n", sizeof(a) / sizeof(int));

}

在 Xcode 中,第一个 printf 行会产生一条警告,指出“格式指定类型‘int’,但参数的类型为‘int *’。

如果我能弄清楚为什么会发生这种情况以及我编写代码的正确方法是什么,我将不胜感激?这仍然编译并运行它会产生预期的结果。因此,虽然结果可能是正确的,但我个人需要了解这些警告的修复方法。

非常感谢!

最佳答案

#include <stdio.h>

使用 "" 用于创建自己的 .h 文件

此外,p 是指针,您必须取消对它的引用 printf("Address of first element of a = %d\n", *p);

请使用标志 gcc -W -Wall -Wextra file.c

编译你的 .c 文件

编辑:如果您要打印指针的地址而不是它所指向的值,请注意 printf 中的 %p 标志: printf("a的第一个元素的地址 = %p\n", p);

关于c - 打印内存位置时 Printf 产生警告但仍在 xcode 中编译和运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46437418/

相关文章:

ios - 包含头文件的问题

c - 空指针是否间接指向数组类型 UB?

c - 修复线程以在某些内核上执行

c - fgets 函数在末尾打印垃圾

c - Solaris 10 上更好的内存(堆)管理

Android:dlopen() 返回 64 位架构的悬挂指针

objective-c - NSSplitViewItem 不像 IB 中设计的那样显示

ios - 在 Interface Builder 中设置 UITabBarItem 图像/图标

c++ - 链表深拷贝构造函数中的指针永远不会达到 null

c - C 中的指针 : when to use the ampersand and the asterisk?