Следующее присваивает указатель (не строка) s
:
const char *s = "navven";
Это означает, что следующее присваивает указатель (не строка)) до a
:
int a = "naveen";
Компьютеры на самом деле не видят разницы между указателем и числом. Они обе вещи, которые вписываются в их регистры. И некоторые люди пользуются этим фактом. Таким образом, хотя компилятор предупреждает вас о том, что вы делаете что-то не так, он все равно позволяет вам обращаться с указателем как с числом.
Так что значение a
заканчивается значением указателя, если оно было int
,Это небезопасно. Не совсем. Хотя вы не можете безопасно использовать int
, вы можете безопасно использовать intptr_t
.
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
int main(void) {
const char *p1 = "naveen";
printf("%p %s\n", p1, p1);
intptr_t i = (intptr_t)p1;
printf("0x%" PRIxPTR "\n", i);
const char *p2 = (const char*)i;
printf("%p %s\n", p2, p2);
return 0;
}
Вывод:
0x51ee878764 naveen
0x51ee878764
0x51ee878764 naveen