Почему указатель не дает значение Ascii? - PullRequest
0 голосов
/ 12 февраля 2019

Это мой текущий код в следующем виде:

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

Когда я выполняю свой код, он показывает 25185 вместо того, чтобы давать мне значение ASCII.

Почему это происходит?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

(Отказ от ответственности: другой ответ показывает, почему вы получаете 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;
}
0 голосов
/ 12 февраля 2019

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

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

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