如果(某个指针)在C中工作如何?

如果(某个指针)在C中工作如何?,c,pointers,C,Pointers,我是C语言的初学者,我正在努力理解指针算术的概念: 我有这样一个代码: #include<stdio.h> void main(){ int a[10]; if(a) printf("%d\n",*a); } #包括 void main(){ INTA[10]; 如果(a) printf(“%d\n”,*a); } 它打印数组a中第一个元素的地址。那很好。但是在我的printf语句中,我使用*操作符来打印值 但是,当我看到我的if语句时,我想知道如

我是C语言的初学者,我正在努力理解指针算术的概念:

我有这样一个代码:

#include<stdio.h>
void main(){
    int a[10];
    if(a)
        printf("%d\n",*a);
}
#包括
void main(){
INTA[10];
如果(a)
printf(“%d\n”,*a);
}
它打印数组
a
中第一个元素的地址。那很好。但是在我的
printf
语句中,我使用
*
操作符来打印值

但是,当我看到我的
if
语句时,我想知道如果没有
*
操作符,
if
如何处理
a
? 我的意思是没有
*
操作符,
if
语句如何访问指针指向的对象

我想我已经很清楚我的疑问了,提前谢谢你

它打印数组中第一个元素的地址

在您的代码中,
*a
等同于
a[0]
您没有打印任何地址,只是一些未初始化的值

根据评论编辑: 不,我的问题是没有*运算符,if语句如何访问 指针指向的对象


在您的代码中,如果(a)不访问内容,它只测试a的地址,该地址永远不会计算为0。

在C中,没有布尔类型,因此当条件不等于0(零)时,将执行if语句体。而且非常确定
a
没有指向地址
0
,因此条件的计算结果为
true

      if (a)
基本上检查a是否为空指针

当你申报时 INTA[10] 从地址“a”开始,分配一个10个整数的内存空间

当您打印f*a时,编译器打印第一个元素,因为您告诉它在地址*(a+偏移量)处打印元素,在您的情况下,偏移量=0

为了说服自己,你可以试着去做

     int *a=null;
      if (a) 
       {
          //code here won't be executed because a points to a null reference
       }

它实际上应该打印第一个元素的内容。
a
是单位化的,因此
a
中第一个元素的值将是完全随机的。不,我的问题是没有
*
操作符,
如果
语句访问指针指向的对象,该语句如何访问?