Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46930
  • 博文数量: 15
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-14 16:12
个人简介

Nothing to tell

文章分类

全部博文(15)

文章存档

2015年(1)

2012年(14)

我的朋友
最近访客

分类:

2012-07-17 18:48:43

原文地址:字符指针与数组 作者:FreedomXura


char *p_char = "hello,world!";

定义完这句之后,则p_char是一个字符指针。

char *p_char = NULL;//定义p_char为char型指针
p_char = "hello,world!";//p_char指向字符串"hello,world!"的首地址,即存放字符'h'的地方.

指针变量的赋值:
p=&a;---(将字符a的地址赋值给p)
p=array;---(将数组array首地址元素的地址赋给p)
p=&array[i];---(将数组array第i个元素的地址赋给p)
p=max;---(max为已经定义的函数,将max的入口地址赋给p)
p1=p2;---(p1,p2都是指针变量,将p2的值赋给p1)

请用至少两种方法实现:字符串拷贝,将字符串a的内容拷贝到字符串b.
1.用数组的方法实现,定义unsigned char a[],和unsigned char b[]

  1 #include <stdio.h>
  2 void copystr(char from[],char to[]);
  3
  4 int main()
  5 {
  6 unsigned char a[]="Yes,you win!";
  7 unsigned char b[]="";
  8 copystr(a,b);
  9 printf("b[] is %s\n",b);
 10 return 0;
 11 }
 12
 13 void copystr(char from[],char to[])
 14 {
 15 unsigned int i=0;
 16 while(from[i]!='\0') //等待copy到字符串的尾部.
 17 {
 18 to[i] = from[i];
 19 i++;
 20 }
 21 to[i]='\0';
 22 }


2.用指针实现

#include <stdio.h>
void copystr(char *p_from,char *p_to);

int main()
{    
    unsigned char a[]="abcdefg";
    unsigned char b[]="1234567";
    unsigned char mxh[]="";
    printf("Before copy:\nThe 'a' is %s\nThe 'b' is %s\nThe 'mxh' is %s\n",a,b,mxh);
    copystr(a,b);
    copystr(b,mxh);
    printf("\nAfter copy:\nThe 'b' is %s\nThe 'mxh' is %s\n",b,mxh);
    return 0;
}

void copystr(char *p_from,char *p_to)
{
    while(*p_from != '\0'//等待copy到字符串的尾部.
    {
        *p_to = *p_from;
        p_from++;
        p_to++;
    }
    *p_to = '\0';
}


你能找到更好地办法吗?Of cource!

#include <stdio.h>
void copystr(char *p_from,char *p_to);

int main()
{    
    unsigned char a[]="abcdefg";
    unsigned char b[]="1234567";
    unsigned char mxh[]="";
    printf("Before copy:\nThe 'a' is %s\nThe 'b' is %s\nThe 'mxh' is %s\n",a,b,mxh);
    copystr(a,b);
    copystr(b,mxh);
    printf("\nAfter copy:\nThe 'b' is %s\nThe 'mxh' is %s\n",b,mxh);
    return 0;
}

void copystr(char *p_from,char *p_to)
{
#if 0
    while(*p_from != '\0')
    {
        *p_to = *p_from;
        p_from++;
        p_to++;
    }
    *p_to = '\0';
#endif

while(*p_to++ = *p_from++);
}


注:while(*p_to++ = *p_from++);实际等效于下面这句:
while((*p_to++ = *p_from++) != '\0');将*p_from赋值给*p_to,如果赋值后的*p_to值等于'\0',则循环终止。

关于数组不得不提的几件事:
1.数组是不能直接赋值的,but可以赋初值.
eg:
(1)char a[]="123456";-------right;
(2)char a[10];
a[]="123456";-----wrong.不能直接赋值

2.数组名就代表着数组的地址,即第一个字符存放在内存中的地址,它是一个常量,不可以被改变
eg:
char a[]="123456";
char *p = a;//定义一个char型指针,并赋值,将其指向a;
int i=2;
*(p+i)与a[i]等效;
如果你想取字符串的第i个字符,可以用*(p+i)来实现,但是绝不能用(a+i)来实现,因为a是即是一个地址常量.
阅读(681) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~