C中的char s[]和char*s有什么区别?

在下面的两个陈述中考虑这两个之间的区别是什么?

null
   char s[] = "geeksquiz";   char *s  = "geeksquiz";

以下是主要区别:

图片[1]-C中的char s[]和char*s有什么区别?-yiteyi-C++库

声明 char s[]=“Geeksquick” ‘创建一个与任何其他数组类似的字符数组,我们可以执行所有数组操作。这个数组唯一的特殊之处是,虽然我们用9个元素初始化了它,但它的大小是10(编译器会自动添加“”)

C

#include <stdio.h>
int main()
{
char s[] = "geeksquiz" ;
printf ( "%lu" , sizeof (s));
s[0] = 'j' ;
printf ( "%s" , s);
return 0;
}


输出:

10jeeksquiz

声明 char*s=“Geeksquick” ‘创建字符串文字。大多数编译器将字符串文本存储在内存的只读部分。C和C++标准表示字符串文字具有静态存储持续时间,任何修改它们的尝试都会给出未定义的行为。 s 只是一个指针,和其他任何指针一样,它存储字符串文本的地址。

C

#include <stdio.h>
int main()
{
char *s = "geeksquiz" ;
printf ( "%lu" , sizeof (s));
// Uncommenting below line would cause undefined behaviour
// (Caused segmentation fault on gcc)
//  s[0] = 'j';
return 0;
}


输出:

8

运行上述程序可能会产生一个警告:“警告:从字符串常量到‘char*’的不推荐转换”。出现此警告是因为s不是常量指针,但存储只读位置的地址。通过指向const的指针可以避免该警告。

C

#include <stdio.h>
int main()
{
const char *s = "geeksquiz" ;
printf ( "%lu" , sizeof (s));
return 0;
}


本文由Abhay Rathi撰稿。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享