字符指针与字符数组的区别

转自:http://cjbskysea.blogbus.com/logs/33673946.html

(1)分配内存
       假设有字符型指针变量与字符数组如下:
       char *p ,s[10];
       编译器为字符数组s分配10个字节内存,用于存放10个字符。而编译器只为指针变量p分配4个字节内存。
   (2)初始化赋值含义
       字符数组与字符指针的初始化赋值形式相同,但其含义不同。例如:
       char s[ ] ="I am a student ! " ;
       char *p="You are a student too ! " ;
       对于字符数组是将字符串放到为数组分配的存储空间去,而对于字符指针是先将字符串存放到内存,然后将

          存放字符串的内存起始地址送到指针p中。  
    (3)赋值方式
       字符数组只能对其元素逐个赋值,而不能将字符串赋给字符数组名。对于字符指针变量,

          字符串地址可直接赋给字符指针变量。例如:
       s="I love China! "; //字符数组名s不能直接赋值,该语句是错误的。
       p="I love China! "; //指针变量p可以直接赋字符串地址,语句正确
  下面这个例子:编译报错:error C2440: “=”: 无法从“const char [7]”转换为“char [30]”

#include <string.h>
#include <iostream>
using namespace std;

void main()
{

char s[30];
 
char *p=0;

p="哈哈!";
   
s="哈哈!"; //错误:C2440: “=”: 无法从“const char [7]”转换为“char [30]”

 cout<<"p="<<p<<endl;

 cout<<"s="<<s<<endl;

 return;
}

但是对字符数组初始化时可以:

char s[]="哈哈!"; //正确
 
char *p=0;

p="哈哈!"; 

 cout<<"p="<<p<<endl;

cout<<"s="<<s<<endl;

    (4)输入方式
       可将字符串直接输入字符数组,而不能将字符串直接输入指针变量。但可将指针变量所指字符串直接输出。
       例如:cin >> s //正确
               cin >> p //错误
               cout<<p //正确
  
   (5)值的改变
      在程序执行期间,字符数组名表示的起始地址是不能改变的,而指针变量的值是可以改变的。例如:

          s=s+5; //错误
      p=s+5; //正确


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值