指针只定义未赋值时,只是分配了一个存放地址的指针空间,如果以后不让其指向已分配的存储空间,那么该指针是个野指针,在以后访问其内容时就会出错,linux里会出现段错误。
字符指针与字符数组,在很多情况下都可以通用。但还是又细微差别,比如说所占的空间大小,32位机字符指针是4字节,字符数组就要看定义的大小了。指针是指针变量,数组名是指针常量
还有一类区别就是在定义时即初始化,字符指针在定义的时候如果定义时即赋值,那么所赋的值是放在程序的常量区的,指针指向该地址,因此该指针指向的位置的值是不能被改变的.而数组则直接被分配了空间,可以任意更改其内容,如: char * str1 = "abc"; char str2[10] = "abc" char * str3 = str1; char * str4 = str2;str1[1] = 'B'; str2[1] = 'B' str3[1] = 'B'; str4[1] = 'B',其中 str[1]=’B’,str3[1]=’B’都是不合法的,而另两个则合法。还有在打印时要注意:看如下代码:
void main()
{
char *p;
char a[2]="2";
p=a;
p[0]='3';//改变所指向地址中的内容
printf("%c/n",*p);//仅打印一个字符
printf(“%s/n”,a);
// printf(“%s/n”,*p);//这样写是不合法的,用指针打印的话只能打印此时指针所指向的地址中的内容,要想全部打印,需要进行指针的移动。
}