int *q=100; 不对,原理是怎样的?解决方案

int *q=100; 不对,原理是怎样的?
为什么char   *p= "abc ";就行?
能说说原理马?

------解决方案--------------------
int *q=100;
编译器并没有为100开辟存储空间,p指向哪里?

char *p= "abc ";
"abc "是常量字符串,被存储在静态区,p指向他们的首地址。

------解决方案--------------------
int *q = 100;

q是一个指针变量,它指向一个int类型的数据的地址;100是一个常值,如果将它直接赋给q,如

果这个操作是正确的,那它的含义是将q指向内存地址位100的内存空间。很显然,这是不能够允

许的,如果允许这种直接给指针赋常值,那人人都是黑客了,想破坏系统易如反掌了。

char *p= "abc ";

首先在内存中开辟了一个静态的区域,用来存储 "abc ",然后用p指向这个字符串的首地址,这是

正确的。