c语言数组与指针的区别

#include <iostream>
using namespace std;
int main()
{
char *a="fb";
char *b="fa";

strcat(a,b);
printf("%s\n",*a);
cout<<strcmp(a,b);

}//为什么a必须用数组,否则出错,而b可以用指针呢
int(*p)[4],这个就是行指针
这种类型的指针p是指向一个一维数组,这个一维数组包含4个整形元素
但是 int a[4];p=a; 这种方式却是不对的
因为p只能指向一个整型的一维数组,不能指向一个整型数据,a所指改野向的正是a[0],是个整型数;
实际上int(*p)[4]这种类型的指针是用于多维数组中的,比如定义一个二维数组int b[3][4],就可以这样赋值p=&b[0],使p指向一维数组b[0],而且p的增减是以一维数明信组的长度为单位的,比如p+1指向的就是b[1]了

int *p[4]这个是指针数组了,首先弄明白这个是数组,里面存放的是指针也就是地址,这个地址所指向的是一个整型数据,核槐喊你可以把p[0],p[1]....当作一个个的指针变量来使用

我学的时候也弄了半天才搞明白,这是我总结的,你多看看指针那关于多维数组与指针的一节,做些练习自己验证几次就容易弄明白了
.
希望能够帮助你 ^_^ 也希望能够选为最佳答案!
因为strcat(a,b);要修改a指向的内存里的内容 而只需读取b所指向内存中的内容
char *a="fb";//a指向知凯誉孙烂的"fb"是只读的 不能修改
char *b="fa";//这边也是只读的
如果改成
#include <iostream>
using namespace std;
int main()
{
char c[10]="fb";
char *a=c;
char *b="fa";

strcat(a,b);
printf("%s\n",a); //还有 这边输出字符串用的是指针 不要加搭段*
cout<<strcmp(a,b);

}
a不是必须漏让用数组,如果使用指针,你让他指返慎局向可读孝兆写的内存。如数组,或者malloc分配内存。char *a="fb";这个a指针指的是常量字符串,是不可写的。
printf 接收的是a的值 而strcat和strcmp接收的是a、b的地址
问题在于你的a数组的座位不够,坐不下