考虑下面的C中的两个语句。两者之间有什么区别?
char s[] = "geeksquiz";
char *s= "geeksquiz";
以下是主要区别:
文章图片
语句"char s [] =" geeksquiz"‘创建一个字符数组, 该数组与其他数组一样, 我们可以执行所有数组操作。关于此数组的唯一特殊之处在于, 尽管我们已使用9个元素对其进行了初始化, 但其大小为10(编译器会自动添加" \ 0")
#include <
stdio.h>
int main()
{
char s[] = "geeksquiz" ;
printf ( "%lu" , sizeof (s));
s[0] = 'j' ;
printf ( "\n%s" , s);
return 0;
}
输出如下:
10
jeeksquiz
该声明 'char * s ="geeksquiz"‘创建字符串文字。大多数编译器将字符串文字存储在内存的只读部分中。 C和C++标准说, 字符串文字具有静态的存储期限, 任何对其进行修改的尝试都会产生不确定的行为。
s只是一个指针, 和其他任何指针一样, 它存储字符串文字的地址。
#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
【C中的char s[]和char *s有什么区别()】在上述程序上运行可能还会产生警告:"警告:不建议将字符串常量转换为'char *'"。发生此警告的原因是s不是const指针, 而是存储了只读位置的地址。指向const的指针可以避免该警告。
#include <
stdio.h>
int main()
{
const char *s = "geeksquiz" ;
printf ( "%lu" , sizeof (s));
return 0;
}
本文由Abhay Rathi提供。如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。
推荐阅读
- Linux echo命令用法示例介绍
- 结构成员对齐、填充和数据打包是什么意思()
- switch和else语句有什么区别(有哪些区别?)
- SAP Labs助理开发人员(FTE)面试经验
- win7系统如何放进u盘呢?
- 大白菜u盘安装win7系统64位图文详细教程
- pe打开盘_教您怎样自制PE打开盘
- win7系统万能无线网卡驱动32位/64位免费下载
- u盘格式化后容量变小,教您u盘格式化后容量变小怎样恢复