char *a与char a[]区别

    xiaoxiao2024-12-07  64

    char *a与char a[]区别:

     

    char *a = "hello"; //a指向字符串常量"hello"的首地址,a存放在栈上,"hello"保存在文字常量区

    char a[] = "hello"; //数组名a也是指向字符串的首地址,a,"hello"都存放在栈上。

     

    两者之间的区别:

    将两个字符串相加:

    #include <stdio.h> #include <string.h> int main() { char *p = "123456"; char a[20] = "hello"; strcat(a, p); printf("%s\n", a); return 0; }

    结果:hello123456

    对比:

    #include <stdio.h> #include <string.h> int main() { char *p = "123456"; char a[20] = "hello"; strcat(p, a); printf("%s\n", p); return 0; }

    结果:Segmentation fault (core dumped)

    分析:a数组地址空间是在栈中分配,可读取可修改,p指针指向的对象"123456\0"存放在文字常量区,只能读取,无法修改。

    两者区别:

    读写能力

    char *a = "abcd"; 此时"abcd"存放在常量区,通过指针只可以访问字符串常量,而不可以改变它。

    char a[] = "abcd"; 此时 "abcd"存放在栈。可以通过指针去访问和修改数组内容。

     

    赋值时刻

    char *a = "abcd"; 在编译时就确定了(因为是常量)

    char a[] = "abcd"; 在运行时确定

     

    存取效率

    char *a = "abcd"; 存于静态存储区。在栈上的数组比指针所指向字符串快。因此慢

    char a[] = "abcd"; 存于栈上,快。

    参考:

    https://www.jb51.net/article/100181.htm

    https://blog.csdn.net/xiadeliang1111/article/details/90573084

    最新回复(0)