C语言 指针引用字符串基础

/*
  数组名和字符指针变量区别在P262
*/
#include<stdio.h>

//void copy(char a[],char b[])       //定义一个复制字符串的函数
void copy(char *a, char *b)         //等价于传入数组名
{
    int i;
    // for(i =0; a[i] != ''; i++)
    // {
    //     //b[i] = a[i];      
    //     *(b+i) = *(a+i);       //这两行同理
        
    // }

    //for还可以写成:     当形参用指针变量的时候也可以这样写
    for(; *a != ''; a++,b++)
    {
        *b = *a;
    }

    b[i] = '';       //在末尾手动加入‘’结束字符串复制,以免在末尾出现未知字符
}
//总结,调用函数时,不管是传入数组名还是字符指针,本质上是一样的,编译器会把数组名当作指针变量处理
//函数的形参也是同样的道理
int main(void)
{
    char str[] = "i love you";      //其实最后一个字符是‘’,字符串的结束标值,但是打印不出来
    printf("%s ",str);
    printf("%c ",str[7]);
    printf("%c ",*(str + 7));      //用指针的方式输出

    char * li = "wo shi dahema";       //声明一个字符型指针变量,存储的是字符串首字符的地址
    printf("%s ",li);
    printf("%c ",li[7]);
    printf("%c ",*(li + 7));  

    int a[] = {1,2,3,4,5,6,7,8,9};
    //int * a = {1,2,3,4,5}     //报错,其他类型无法这样使用
    printf("%d ",a);
    printf("%d ",a[5]);
    printf("%d ",*(a+5));

    //字符串的复制
    char str_copy[15];
    for(int i=0; str[i] != ''; i++)
    {
        //*(str_copy + i) = *(str + i);   //把每个字符依次赋值
        str_copy[i] = str[i];              //同理
    }
    printf("复制后的字符串:%s ",str_copy);

    //字符串的复制方法二:
    char str_copy2[15];
    char *x, *y;
    x = str;
    y = str_copy2;
    for(;*x != ''; x++,y++)
    {
        *y = *x;
    }
    printf("复制后的字符串2:%s ",str_copy2);

    //用函数实现复制
    char string[] = "I am the king of the world.";
    char string_copy[30];
    char *p, *q;
    copy(string,string_copy);   //传入数组名

    p = string;
    q = string_copy;
    //copy(p,q);                  //等价于入传入数组名
    printf("%s ",string);
    printf("%s ",string_copy);

    return 0;
}
原文地址:https://www.cnblogs.com/hemage/p/13182774.html