如果(某个指针)在C中工作如何?
我是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语句时,我想知道如
#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
中第一个元素的值将是完全随机的。不,我的问题是没有*
操作符,如果语句访问指针指向的对象,该语句如何访问?