Pointers 为什么指针给出两个不同的地址?

Pointers 为什么指针给出两个不同的地址?,pointers,multidimensional-array,pointer-address,array-address,Pointers,Multidimensional Array,Pointer Address,Array Address,我有这个节目。我有些怀疑。您可以在编译器中运行它。我正在linux中使用gcc编译器 #include<stdio.h> int main() { int j=4,*add; int i=2; int a[i][j]; for (i=0;i<=1;i++) { for(j=0;j<=3;j++) { scanf("%d",&a[i][j],"%d",&a[i][

我有这个节目。我有些怀疑。您可以在编译器中运行它。我正在linux中使用gcc编译器

#include<stdio.h>
int main()
{
    int j=4,*add;
    int i=2;
    int a[i][j];
    for (i=0;i<=1;i++)
    {
        for(j=0;j<=3;j++)
        {
            scanf("%d",&a[i][j],"%d",&a[i][j]);
        }
    }
    for(i=0;i<=1;i++)
    {
        for (j=0;j<=3;j++)
        {
            add=&(a[i][j]);
            printf("\nSize of %d is %d and address is: %u that should be equal to: %d",a[i][j],sizeof(a[i][j]),&(a[i][j]),add);//Address are not equal while add is having the value of &(a[i][j])
            printf("\nSize of %d is %d and value is: %d that should be equal to: %d",a[i][j],sizeof(a[i][j]),*(&(a[i][j])),*add);//Here value at both addresses are same
        }
     }

    printf("\n initial address of the array is: %u that should be equal to address given by &a[0][0]",&a); //And it's equal

return 0;
}
#包括
int main()
{
int j=4,*加上;
int i=2;
INTA[i][j];

对于(i=0;i它们是相同的地址。这可能是使您认为它们不同的符号。使用%p打印指针或同时使用%u。

这两个
%d
%u
都不是指针。使用
%p
(并强制转换为
void*
)出于这个目的。还有一个是
%d
,另一个是
%u
。相同的地址,但不同的表示形式。我喜欢运算符的地址后跟一个解引用。同样,还有
scanf(“%d”、&a[I][j]、“%d”、&a[I][j]);
?非常感谢特里斯坦。)你是对的。我也用%u做加法。地址对两者都是相等的。但现在的问题是为什么%d给出了-ve地址。我知道它用于整数变量而不是整数指针。再次感谢你。:)非常感谢你,我用%u做加法,地址对两者都是相等的。用%u和%p做不同的事情。两者都给出了指针的地址。但其中一个以整数形式给出地址,另一个在0axtu23i90中给出类似的内容。因此,使用%u我们可以添加/减去地址。