int *c
存储整数变量的地址,但不存储整数值。这就是您收到错误/警告的原因。
char *c={'q','w'}
是 c 中的无效初始化。因为,指针可以指向一块分配的内存。但是没有{'q','w'}
以这种方式为自己分配内存。
如果你愿意,你可以使用
`char *c=(char[]){'q','w'}`
因为,这种方式不会进行无效初始化,因为{'q','w'}
类型转换为char[]
可以指向的类型c
。
同意您对 char *c 的回答,但是通过在这里分配 char *c="jay" 我也将数组定义为 c={'j','a','y','\0'} 那么是什么除了 '\0' 之外,这两者之间的基本区别
因为,{'w','q'}
当char[]
您使用char *p={'q','w'};
. 但是当你使用时char *p="hello"
,类型string literal
被解析为char array
. 这就是C language
定义string literals
它们是字符流而不是int
s 流或其他任何东西的方式。
编译时,每个这样的字符串文字都存储在静态存储位置,并且是完美的 a char array
,因此可以通过c
which 的类型来指向char *
。但这些数组{}
语法并非如此。因为,{'q','w'} 也可以是一个整数数组,而无需先将其转换为 char[],它如何有资格为它赋值char *
?例如,int p[]={'1','2'}
编译得很好。因为指针算术受其类型影响,受type
s影响size
。{'1','2'}
需要2*sizeof(int)
它是否是一个int
数组,2*sizeof(char)
如果它是一个char
数组。