第八篇,字符数组和字符指针详细讲解。

一、字符数组。
1、什么是字符数组?
在一个数组中,每一个成员都是一个字符
例如: char A[3]   --> 每一个成员都是字符类型的数据,组成一个字符串。

2、字符数组的赋值?
char A[10] = {'h','e','l','l','o'};   --> 剩余没有赋值的5个成员的值都是十进制的0。  --> 等价于 5个'\0’
char A[10] = {"hello"};               --> 将字符串"hello"赋值给数组。
char A[10] = "hello";                 --> 与第2种写法一致,{}可以省略。

3、思考题。
1)char A[10] = {"10086"};  与  int A[10] = {1,0,0,8,6};  有什么区别?

char A[10] = {"10086"}  -> 其实这10086这几个数字是一些字符来的  等价于  char A[10] = {'1','0','0','8','6'};
                                       char A[10] = {49,48,48,56,54};

int A[10] = {1,0,0,8,6};  -> 这些10086数字都是十进制的数字。

2)请问能不能这样写?
int A[10] = "10086";                  --> 不可以将字符串直接赋值给一个整型数组。
int A[10] = {'1','0','0','8','6'};    --> 正确,等价于 int A[10] = {49,48,48,56,54};

4、从内存角度分析以下的问题。
char A[10] = {'h','e','l','l','o'};

char A[10] = {"hello"};

详细区别: 字符数组赋值的区别.jpg

二、字符指针。
1、什么是字符指针?
指向一个字符变量的地址就是字符指针。

例如:
int a;
int *pa = &a;   --> pa是整型指针,这个指针指向整型变量a。

char b;
char *pb = &b;  --> pb是字符指针,这个指针指向字符变量b。

2、有时候,我们会看到一个字符串赋值给一个字符指针?
char *p = "helloworld";   --> 正确

问题:究竟字符指针p指向字符,还是指向一个字符串?
字符指针永远永远都是指向一个字符,不可能指向字符串的,在该案例中,字符指针p存放着helloworld字符串的第一个元素'h'的地址。

3、关于字符数组与字符指针的问题。
1)请问以下两句话有什么区别?
char A[10] = "hello";
在内存中连续申请10个字节的空间,然后使用变量A间接访问这片内存空间,然后将常量区中的"hello"这个字符串拷贝到变量A对应的空间中。

char *p = "hello";
在内存中连续申请8个字节的空间,然后使用变量p间接访问这片内存空间,然后将常量区中的"hello"的首元素'h'的地址赋值给变量p对应的空间中。

2)每一个字符串都是属于常量区的数据,而每一个字符串在常量区都会以'\0'作为结束标志。
   所以拷贝字符串时,是连'\0'一起拷贝。

3)%s   --> 输出字符串。
输出原则:
给定一个地址,判断该地址上的字符是不是\0
如果不是'\0',则打印该字符,并将地址往后挪动一个单位,再继续判断。
如果是'\0',则结束打印。


#include <stdio.h>

int main(int argc,char *argv[])
{
    char A[10] = "hello";
    
    char *p = "hello";
    
    printf("A = %s\n",A); //hello
    printf("p = %s\n",p); //hello
    
    A[2] = '\0';
    printf("A = %s\n",A); //he
    
    p[2] = '\0';  //p[2] = *(p+2)   //不可以给常量赋值
    printf("p = %s\n",p);
    
    return 0;
}


   练习: 指针习题(C语言).doc  14  16   17

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖爱Kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值