【发布时间】:2014-05-24 07:47:41
【问题描述】:
新学习者;关于指针的一些难题;
我从书上了解到,在使用指针之前必须对其进行初始化,所以我们通常这样使用
int a = 12;
int * p = &a;
所以我明白为什么int* p = 12 是错误的,因为它没有地址;
那我今天在编码的时候发现了一些东西,就是从这个:
char * months[12] = {"Jan", "Feb", "Mar", "April", "May" , "Jun", "Jul"
,"Aug","Sep","Oct","Nov","Dec"};
然后我想到了另一个常用的情况,那就是:
char *p = "string"; (this is ok , why int * a = 12 can't be allowed ?)
我很困惑。它何时初始化以及如何初始化?为什么int * a = 12 不能自动初始化?也许是关于记忆的安排。
【问题讨论】:
-
char *p = "字符串";不行!编译器会让你这样做并发出警告,但这很危险,以后可能会导致问题。
-
@thang 不幸的是,它被允许但已弃用。
const char* p = "string";可以。 -
int *a=12表示将a(通常内存地址)设置为值 12(不将 a 指向的整数设置为 12)...但是字符串文字已经表示为 constant char 数组,可以转换为 constant char 指针...因此您可以将它们分配给指针,而不是复制的字符串,但复制对现有字符串的引用。 -
"我明白为什么 int* p = 12 是错误的,因为它没有地址;" - 不,这是错误的,因为
12不是地址。 -
这是错误的,因为 12 在许多系统上都不是有效地址。