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是即是一个地址常量.
阅读(720) | 评论(0) | 转发(0) |