字符指针变量

字符指针变量的注意问题:

指针就是地址。指针变量就是存储地址的变量。

1.关于对字符指针的赋值相关问题。
char *p;
p = “Hello world”;
是错误的,因为此时 p 并没有初始化,即没有一个地址,此时对p = “Hello world” 的赋值,即相当于将”Hello world”放在了 一个未知的地址,(这个地址也许是已经被占用的地址,就会覆盖了该地址的原内容。在我们定义一个字符数组时候 char str[] =”Hello world” 系统会为我们自动分配一个空闲的地址空间。)。
但是可以直接使用 char *p = “Hello World”。
也可以char str[] = “Hello world”;
char *p;
p = str;

2.对字符串的复制的时候,为了保险最后应该复制进去结束符 ‘\0’ 。

3.对于字符数组名 和 指针的关系:
char str[] = “Hello world”;
char *p;
p = str;
字符数组名是不可变的,而指针是可以改变的。即 str 永远是指向该字符串的首地址,不能重新赋值,比如自增自减运算都是没办法执行的。而指针则可以进行相关算数运算,而指向字符串的其他位置,可以自增自减。

以后再慢慢改进。

//将字符串a复制为字符串b 

#include <stdio.h>
void copy_string(char *from,char *to);
int main(){

    char str[]="I love China!";
    printf("这个字符串是:%s\n",str);
    printf("这个字符串的长度是:%d\n",sizeof(str));//sizeof(str) = 14,因为最后一有一个字符串结束符

    const char *str1="I love China!";       //字符串常量  ,不能对字符串常量进行重新赋值 
    printf("这个字符串是:%s\n",str1);
    printf("这个字符串的长度是:%d\n",sizeof(str));//sizeof(str) = 14,因为最后一有一个字符串结束符


    char str2[14] =  "I am a boy.";//不能在赋值语句中整体赋值。只能在定义时整体赋初值 
    printf("------------------------------------LINE-------------------------------------\n");

    char stra[] = "I am a boy.";
    char strb[20];
//  printf("-------one---------\n");
//  int ia=0;
//  for(;str[ia]!='\0';ia++){
//      strb[ia]=stra[ia];
//  }
//  strb[ia]='\0';  //为什么最后还要把\0加上去呢?----->因为 
//  printf("The string is : %s\n",strb);
    printf("-------two---------\n");
    copy_string(stra,strb);
    printf("The string is : %s\n",strb);

    printf("-------改变指针变量的值---------\n");
    char *a_po=stra;
    a_po=a_po+3;
    printf("% s\n",a_po);   
    printf("-------字符数组的个元素的值是可以改变的 可以对他们再赋值---------\n");
    stra[5]='\0';
    printf("% s\n",stra);
    printf("-------字符指针变量指向的字符串中的内容是不可以改变的再赋值 符串常量---------\n");
    a_po[3]='\0'; 
    printf("% s\n",a_po);
}
void copy_string(char *from,char *to){
    /*常用 
    for(;*from!='\0';from++,to++){
        *to=*from;
    }
    *to='\0';
    */

    /*简while((*to++=*from++)!='\0'){

    }
    *to='\0';
    */

    while(*from){//*from == '\0' == 0 ('\0'的ASCII码)
        *to++=*from++;
    } 
    *to='\0';
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值