二者不都是指针类型吗?为什么sprintf()不接受char(*)[ ]
指针数组和非指针数组的区别。望采纳!!
一个是指针数组,一个是指针,怎么能一样呢
char[] 和 char一样吗
"char(*) []" 和 "char *" 是不同的类型。前者是指向字符数组的指针,而后者是指向字符的指针。
使用 "char " 可以将其当作指向字符串的指针来使用,而 "char()[]" 则表示指向字符数组的指针。
对于 sprintf() 函数,其要求第一个参数是一个字符数组或一个字符指针,因此不能直接使用 "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