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它们是字符流而不是ints 流或其他任何东西的方式。
编译时,每个这样的字符串文字都存储在静态存储位置,并且是完美的 a char array,因此可以通过cwhich 的类型来指向char *。但这些数组{}语法并非如此。因为,{'q','w'} 也可以是一个整数数组,而无需先将其转换为 char[],它如何有资格为它赋值char *?例如,int p[]={'1','2'}编译得很好。因为指针算术受其类型影响,受types影响size。{'1','2'}需要2*sizeof(int)它是否是一个int数组,2*sizeof(char)如果它是一个char数组。