char(*)[ ]与char * 的区别是什么

二者不都是指针类型吗?为什么sprintf()不接受char(*)[ ]

指针数组和非指针数组的区别。望采纳!!

一个是指针数组,一个是指针,怎么能一样呢
char[] 和 char一样吗

"char(*) []" 和 "char *" 是不同的类型。前者是指向字符数组的指针,而后者是指向字符的指针。

使用 "char " 可以将其当作指向字符串的指针来使用,而 "char()[]" 则表示指向字符数组的指针。

对于 sprintf() 函数,其要求第一个参数是一个字符数组或一个字符指针,因此不能直接使用 "char(*)[]" 作为参数。

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:char * 与char []区别总结
  • 同时,你还可以查看手册:c语言-atomic_char 中的内容
  • 除此之外, 这篇博客: char * 与char []区别总结中的 2.char *的方式 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我们看看char* a =“c1” 这行代码到底执行了哪些操作:
    1.声明了一个char*的标量,也就是声明了一个指向char的指针。
    2.在内存的文字常量区,开辟了一个空间存储字符串常量"c1"。
    3.返回这个区域的地址,并且这个地址作为值给了字符指针变量a。

    最终的结果就是:指针变量a指向了一个字符串常量"c1"。

    因为”c1“是在常量区,所以其内容是不可以修改的。如果我们试图修改a指向的内存区域值,程序会崩溃

    void charcode() {
        char* a = "c1";
        *(a+1) = '2';
        cout<<a<<endl;
    }
    

    此时代码会报错崩溃

    /bin/sh: line 1: 48910 Bus error: 10 
    .......
    

    但是a是个指针变量,其指向的地址是可以修改的,因此如下代码可以正常运行

    void charcode() {
        char* a = "c1";
        a = "c2";
        printf("a=%s", a);
    }
    

    输出为:

    a=c2