字符数组与字符指针

1. 字符数组

存放字符量的数组

#include<stdio.h>

void print_str(char str[]){
    int i=0;
    printf("\nstring = ");
    while(str[i]!='\0'){
        printf("%c",str[i]);
        i++;
    }
    printf("\n");
}

void copy_str(char str1[], char str2[]){
    int i=0;
    while(str1[i]!='\0'){
        // *(str2+i) = str1[i];
        str2[i] = str1[i];
        printf("str1[%d] = %c  ",i,str1[i]);
        i++;
    }
    str2[i] = '\0';
}

int main(){
    //默认strint1[] = string1[15];
    //string2[] = string2[12];
    // char string1[] = "hello worldttt";
    // char string2[] = "world hello";
    char string1[30] = "hello worldttt";
    char string2[30] = "world hello";

    printf("string1 = %s\n",string1);
    printf("string2 = %s\n",string2);

    //不初始化数组大小时,拷贝结果
    //string1 = tt;
    //string2 = hello worldttt;
    //因为,string1[15],string2[12]
    copy_str(string1,string2);
    // int i;
    // for(i=0;*(string1+i)!='\0';i++){
    //     *(string2+i) = *(string1+i);
    // }
    // *(string2+i) = '\0';

    // printf("string1 = %s\n",string1);
    // printf("string2 = %s\n",string2);

    print_str(string1);
    print_str(string2);

    return 0;
}

2. 字符指针

字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址
静态区字符串不可修改

#include<stdio.h>

void print_str(char *str){
    printf("string = %s\n",str);
}

void copy_str(char *str1, char *str2){
    char *from = str1, *to = str2;
    // while(*from!='\0'){
    //     *to++ = *from++;
    // }
    // *to = '\0';
    /* 
    while((*to = *from)!='\0){
        to++;
        from++;
    }
    */
    
    while(*to++ = *from++){
        ;
    }
    
}
int main(){
    char *string1 = "hello world11111";
    char *string2 = "world hello";
    char string3[] = "world hello11";
    print_str(string1);
    print_str(string2);
    printf("string3 = %s\n",string3);
    printf("*string3+5 = %s\n",string3+5);

    //不可写,报错,静态区字符串不可修改
    // copy_str(string1,string2);

    // printf("string1 = %s\n",string1);
    // printf("string2 = %s\n",string2);

    //成功运行
    copy_str(string1,string3);

    printf("string1 = %s\n",string1);
    printf("string3 = %s\n",string3);

    return 0;
}

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

  1. 字符数组由若干个元素组成,每个元素放一个字符,
    字符指针变量中存放的是地址(字符串第一个字符的地址),绝不是将字符串放到字符指针变量中。
  2. 赋值方式
    对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值
    char str[20]; str = "hello world";
    对字符指针变量则可,char *a; a = "hello world",赋给a的是字符串第一个元素的地址
  3. 定义一个字符数组,编译时为它分配内存单元,他有确定的地址,定义一个字符指针时,给指针变量分配内存地址。
  4. 上例中*string3+5 = hello11 ∗ s t r i n g 3 + 5 *string3+5 string3+5将字符指针首地址向后移,输出字符串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值