Why pointer not giving its Ascii Value

Refresh

February 2019

Views

31 time

-1

here is my Code.

#include<stdio.h>
int main() {
  /* code */
  char a[5] = {'a','b'};
  int *p =a;
  printf("%d\n", *p);
return 0;
}

So here, When I execute its showing "25185" instead of giving a ascii value.

Why is it so?

Thank you

2 answers

2

Это неопределенное поведение, так что все может случиться. Что же касается того, что вы наблюдаете, в частности, вот объяснение:

Если массив имеет только некоторые из его значений инициализируется при объявлении, остальные значения равны нулю. Таким образом , ваш массив aявляется 'a', 'b', '\0', '\0', '\0'. Когда интерпретируется как int, что, на ваш прямой порядок байтов машины, составляет 32 бита, это имеет значение 0x00006261, или 25185 в десятичной системе счисления.

2

(Отказ от ответственности: другой ответ показывает , почему вы получите 25185, это один показывает , как вы можете достичь своей цели.)

Если вы хотите вывести значение ASCII a[0](который , кажется, что вы пытаетесь сделать, int *p =a;), рассказывает printf()вы хотите передать byte, и использовать char*(указатель на символ, который является байт в C) , чтобы указать к нему:

int main (int arg, char **argv)
{
  char a[5] = {'a','b'};
  char *p =a; // points to a char, ie a byte
  printf("%hhx\n", *p); // tells to printf it's a byte type
  return 0;
}