Как, если (некоторый указатель) в C работает? - PullRequest
1 голос
/ 31 марта 2012

Я новичок в C и пытаюсь понять концепцию арифметики указателей:

У меня есть такой код:

#include<stdio.h>
void main(){
    int a[10];
    if(a)
        printf("%d\n",*a);
}

Который печатает адреспервый элемент в массиве a.Все в порядке.Но в моём выражении printf я использую оператор * для вывода значения.

Но когда я смотрю на свое утверждение if, мне интересно, как без оператора *, if работает на a?Я имею в виду без оператора *, как оператор if обращается к объекту, на который указывает указатель?

Полагаю, я достаточно ясно понимаю мои сомнения, заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 31 марта 2012

который печатает адрес первого элемента в массиве a

В вашем коде *a эквивалентно a[0]. Вы не печатаете какой-либо адрес , просто какое-то неинициализированное значение.

РЕДАКТИРОВАТЬ согласно комментарию:

нет мой вопрос без оператора *, как еслиоператор обращается к объекту, на который указывает указатель

В вашем коде if (a) не обращается к содержимому, он только проверяет адрес - который никогда не будет равен 0.

0 голосов
/ 31 марта 2012
      if (a)

в основном проверяет, является ли a нулевым указателем.

Когда вы объявляете int a [10], вы выделяете пространство памяти из 10 целых чисел, начиная с адреса 'a'.

Когда вы печатаете f * a, компилятор печатает первый элемент, потому чтовы говорите ему напечатать элемент по адресу * (смещение +), которое в вашем случае смещение = 0;

Чтобы убедить себя, вы можете попробовать сделать

     int *a=null;
      if (a) 
       {
          //code here won't be executed because a points to a null reference
       }
0 голосов
/ 31 марта 2012

В C нет типа для логического значения, поэтому тело оператора if выполняется, когда условие не равно 0 (нулю).И вполне уверен, что a не указывает на адрес 0, поэтому условие оценивается как true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...