数组名和字符指针的不同

数组名和字符指针可以相互装换,但是他们二者在使用上却有不同之处:

 

//=======第一个不同,指针可以相互赋值,但是数组名却不可以
// 数组名作为数组中第一个元素的地址,其地址也是一个地址,但是字符指针是另外单独开辟的一个空间,指向一个内存单元,
//因此数组名的地址是固定,自然不能相互赋值了

 

 

  char *s1="abc";
  char *s2="efg";
    char ch1[]="123";
 char ch2[]="456";
/*
 s1=s2;  可以
 ch1=ch2;  不可以
*/

//============第二,取值的方式
//==编译器符号表有一个符号s1,他的地址为1244996,然后取地址1244996的内容,就是abc的地址"4337500",然后把i和4337500相加,然后取出(i+4337500)的内容.
//===编译器符号表有一个符号 ch1 地址为 1244988(它前面的单元式指针s1,s2,共占8个字节,这是编译器分配在栈里的

//然后首先取i的值,把i和1244988相加,然后取出(i+1244988)的内容.

 printf("s1     地址:%d/n",&s1); //存放指针的内存地址
    printf("s1[0]  地址:%d/n",&s1[0]);   //字符串第一个字符的地址  注意:他们是不同的
 printf("s1[1]  地址:%d/n",&s1[1]);   //字符串第二个字符的地址
    printf("ch1    地址:%d/n",&ch1);     
    printf("ch1[0] 地址:%d/n",&ch1[0]);   //输出ch1和ch1[0]是都是数组第一个元素内存单元的地址
 printf("ch1[1] 地址:%d/n",&ch1[1]);

 

 //同样用作函数参数的时候,因为会进行参数拷贝,用指针回比用数组要节省空间

 

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值