字符指针与字符数组的存储问题

 

指针只定义未赋值时,只是分配了一个存放地址的指针空间,如果以后不让其指向已分配的存储空间,那么该指针是个野指针,在以后访问其内容时就会出错,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);//这样写是不合法的,用指针打印的话只能打印此时指针所指向的地址中的内容,要想全部打印,需要进行指针的移动。

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值