Pointers 当我执行此代码时,为什么会发生错误?

Pointers 当我执行此代码时,为什么会发生错误?,pointers,syntax-error,Pointers,Syntax Error,为什么书中的代码也会出现这种错误?我知道这是个愚蠢的问题,但我很困惑 当我在ubuntu上执行此代码时,它将打印此错误: 不。当你编译它时,它会打印出来 那是因为。为此,请使用%p 你什么时候执行?还是在编译的时候?这是一个错误还是一个警告?当我编译时,这是一个警告,也许这就是你应该在帖子中写的,而不是在我执行和打印这个错误时说的。这是我的错误,但给我一个问题的解决方案回答你的问题:为什么即使在一本书的代码中也会出现这种错误?是因为%u需要无符号int,而您正在传递int*。这是类型不匹配。这不

为什么书中的代码也会出现这种错误?我知道这是个愚蠢的问题,但我很困惑

当我在ubuntu上执行此代码时,它将打印此错误:

不。当你编译它时,它会打印出来


那是因为。为此,请使用%p

你什么时候执行?还是在编译的时候?这是一个错误还是一个警告?当我编译时,这是一个警告,也许这就是你应该在帖子中写的,而不是在我执行和打印这个错误时说的。这是我的错误,但给我一个问题的解决方案回答你的问题:为什么即使在一本书的代码中也会出现这种错误?是因为%u需要无符号int,而您正在传递int*。这是类型不匹配。这不是一个错误,因为从技术上讲,它是合法的c语法。你只是不正确地使用了printf。那么为什么它会在turboc上执行呢?@user2873459因为turboc是一个蹩脚的、过时的、愚蠢的编译器,它对格式字符串错误一无所知。哦,当我用int*I、*j、a[]={1,2,3,4}等指针减去两个地址时;I=&a[0];j=&a[2];printf%p,j-I;当我在指针中分配数组的基址(如p=&a)时,为什么会再次给出错误;编译器再次给我一个警告?@user2873459,因为两个指针的差不是指针。它是ptrdiff_t类型的整数,将使用%td打印。另外,关于为什么它会在p=&a上发出警告:我不知道。如果a真的是int,而p是int*,则不应该是。
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int a=2,*p;
    p=&a;
    printf ("address of a=%u", p);
    return (0);
}