?
??1 字符串的表示形式
在C程序中,可以用两种方法访问一个字符串
(1)用字符数组存放一个字符串,然后输出该字符串。
(2)用字符指针指向一个字符串
??2 字符指针作函数参数
将一个字符串从一个函数传递到另一个函数,可以用地址传递的方法,即用字符数组名作参数,也可以用指向字符的指针变量作参数。在被调用的函数中可以改变字符串的内容,在主调函数中可以得到改变了的字符串。
(1)用字符数组作参数
(2)形参用字符指针变量
??3 对使用字符指针变量和字符数组的讨论
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们两者之间是有区别的,不应混为一谈,主要有以下几点。
(1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址,决不是将字符串放到字符指针变量中。
(2)赋值方式。
(3)对字符指针变量赋初值。
(4)如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。
(5)指针变量的值是可以改变的。
(6) 用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。
看下例题
例题:指针实现,判断一个子字符串是否在某个给定的字符串中出现。
#include <stdio.h> #include <string.h> int isSubstring(char *str,char *substr) { ?char *ch,*s; ?int flag ; ? ?while(*str!='\0'){ ? if(*str == *substr) ? { ?? ? ? ? s = str; ? ? ? ch = substr; ? ?while(*ch!='\0') ? ?{ ? ? ?if(*s++ != *ch++ ) ? ? ?{ flag = 0; break;} ? ?} ? ?if(*ch=='\0') ? ? flag = 1; ? } ? str++; ?} ?return flag; } int main() { char s[]="Hello world!"; ?char ch[10]; ? ?printf("输入要查找的字串:"); gets(ch); ?if(isSubstring(s,ch)) ? ?printf("%s是%s一个子串\n",ch,s); ?else ? ?printf("%s不是%s一个子串\n",ch,s);? ?return 0;? ?
?
数组
#include<stdio.h>
int main()
{
const char *str= "123abcd";
char copy_array[10];
int i=0;
for(i=0;i<sizeof(str);i++)
{
copy_array[i] = *str++;
}
printf("%s\n",copy_array);
return 0;
}
?
|