字符串指针与字符数组区别(二)--字符串输出与指针的相加减

(1) 用字符数组存储一个字符串,然后输出该字符串。

main(){

   char string[]="I love China!";

   printf("%s\n",string);

}

2       用字符指针指向一个字符串。可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。

main(){

   char *string="I love China!";

   printf("%s\n",string);

}

理解:为什么字符串输出的时候是一个指针(即string),而不是*string?

1 数组名相当于指向数组第一个元素的指针,在访问数组元素及数组的过程中,其实是通过指针来访问数组的元素的。

2 因为实际上在内存中是把字符串的第一个元素的地址(字符数组也是其首元素的地址)赋给string的。在输出时,要用:printf(“%s\n”,string);,其中“%s”是输出字符串时所用的格式符,在输出项中给出字符指针变量名,则系统先输出它所指向的一个字符数据,然后自动是string加1,使之指向下一个字符,然后再输出一个字符……如此知道遇到字符串结束标志“\0”为止。

注意:可以通过字符数组名或者字符指针变量输出一个字符串。而对一个数值型数组,是不能企图用数组名输出它的全部元素的。例如:

int i[10];

………

printf(”%d\n”, i);

是不行的,只能逐个输出!!!!!!显然%s可以对一个字符串进行整体的输入和输出。

2 对变量,编译器,类型转换,指针加深理解的题目

#include <stdio.h>
int main(void)
{
       char* str = "ABCDEFGHIJKL";
       int* pInt = (int*)str;    //类型转换
       printf("%c\n%c\n",*(str+1),*(char *)(pInt+1));
       return 0;
}

知识点理解:

1 其实数据在内存中的存储都是二进制的0与1,数据输出的时候,对应不同的数据类型时,编译器即将二进制转换为对应数据类型。char型存储时其实是以其ASCII码对应的二进制存储的。

2 指针相加减时,要看类型,打狗看主人,指针加减看类型,其运算的值n*sizeof(类型),比如:字符型地址加1,其实地址加也是sizeof(char) =1,整形地址加1,地址加sizeof(int) =4,结构体数组中,地址加1,地址加sizeof(结构体)。

本题中,’A’ASCII码为97*(char *)(pInt+1));即为97+4=101对应的char,实际为char型指针右移四位,故答案为 E.

本题答案为:

B

E

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值