指针与字符串实例练习

在C语言中,字符串是存放在字符数组中的,字符串的引用如下:

char string[] ="I love China!";//定义字符数组string

printf("%s\n",string);//输出整个字符串

printf("%c\n",string[7]);//输出第七个元素

该字符串长度是14,最后一个字节存放字符串结束符‘\0‘。

例1:通过字符指针变量输出一个字符串。

1 int main()
2 {
3     char *string="I love China!";
4     printf("%s\n",string);
5     return 0;
6 }

定义一个char*变量,即字符型指针变量string,用字符串常量"I love China!"初始化,把字符串的第一个元素的地址赋给指针变量string,使string指向字符串的第一个字符。

%s使输出字符串格式符,系统会输出string指向的第一个字符,然后自动使string+1,指向下一个字符,直到‘\0‘为止。

例2:将字符串a复制为字符串b,然后输出字符串b。

 1 int main()
 2 {
 3     char a[]="I am student.",b[20],*p1,*p2;
 4     p1=a;p2=b;//指向数组中第一个元素
 5     for(;*p1!=‘\0‘;p1++,p2++)
 6        *p2=*p1;
 7     *p2=‘\0‘;
 8     printf("string a is:%s\n",a);
 9     printf("string b is:%s\n",b);
10     return 0;
11 }

例3:用函数调用实现字符串的复制。

(1).用字符数组名作为函数参数。

 1 int main()
 2 {
 3     void copy(char from[],char to[]);
 4     char a[]="I am a student.";
 5     char b[]="You are a student.";
 6     printf("string a=%s\nstring b=%s\n",a,b);
 7     printf("copy string a to string b:\n");
 8     copy(a,b);//用字符数组名作为实参
 9     printf("\nstring a=%s\nstring b=%s\n",a,b);
10     return 0;
11 }
12 void copy(char from[],char to[])//形参为字符数组
13 {
14     int i=0;
15     while(from[i]!=‘\0‘)
16     {
17         to[i]=from[i];
18         i++;
19     }
20     to[i]=‘\0‘;
21 }

(2).用字符型指针变量作实参。

 1 int main()
 2 {
 3     void copy(char from[],char to[]);
 4     char a[]="I am a student.";
 5     char b[]="You are a student.";
 6     char *from=a,*to=b;//指针变量指向数组首元素
 7     printf("string a=%s\nstring b=%s\n",a,b);
 8     printf("copy string a to string b:\n");
 9     copy(from,to);//用字符指针变量作实参
10     printf("\nstring a=%s\nstring b=%s\n",a,b);
11     return 0;
12 }
13 void copy(char from[],char to[])//形参为字符数组
14 {
15     int i=0;
16     while(from[i]!=‘\0‘)
17     {
18         to[i]=from[i];
19         i++;
20     }
21     to[i]=‘\0‘;
22 }

(3).用字符指针变量作形参和实参。

 1 int main()
 2 {
 3     void copy(char *from,char *to);
 4     char *a="I am a student.";
 5     char b[]="You are a student.";
 6     char *p=b;
 7     printf("string a=%s\nstring b=%s\n",a,b);
 8     printf("copy string a to string b:\n");
 9     copy(a,p);//用字符指针变量作实参
10     printf("\nstring a=%s\nstring b=%s\n",a,b);
11     return 0;
12 }
13 void copy(char *from,char *to)//形参为字符指针变量
14 {
15     for(;*from!=‘\0‘;from++,to++)
16        *to=*from;
17     *to=‘\0‘;
18 } 

上述的三个程序区别实参和形参的不同,都达到了复制字符串的目的,仔细观察三个程序不同的地方,总结字符指针变量和字符数组的区别如下:

1.字符数组中存放的是元素,而字符指针存放的是地址。

2.可以对字符指针变量赋值,但不能对数组名赋值。

char *a;  a="I love China!";//正确的

char string[14];  string="I love China!";//错误的

3.初始化含义不同。

char *a="I love China!";//把字符串第一个元素的地址赋给a

char string[]="I love China!";//把字符串赋给数组中的各个元素

4.指针变量的值是可以改变的,但数组名代表数组首元素的地址,是个固定值,不能改变。

时间: 2024-10-26 15:42:47

指针与字符串实例练习的相关文章

指针,数组,字符串

指针和数组的区别     指针和数组都可以通过下标的方法和指针发(p+i)来访问数组元素     1.指针  可以修改指向     数组名 是常量,表示首元素的地址,不能改变     2.指针存贮空间:4/8个字节     数组的存储空间:元素个数 * 空间存储空间 定义字符串两种方式:     1.使用数组定义字符串 ---->    字符串变量  字符串可以被改变     2.使用指针定义字符串 ---->    字符串常量  字符串元素不可改变 指针作为函数参数进行传递,可以实现形参的改

深入理解C指针之五:指针和字符串

基础概念 字符串可以分配到内存的不同区域,通常使用指针来支持字符串操作.字符串是以ASCII字符NUL结尾的字符序列.ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中.不过,并非所有的字符数组都是字符串.例如,字符数组可能没有NUL字符. C中有两种类型的字符串. * 单字节字符串.由char数据类型组成的序列. * 宽字符串.由wchar_t数据类型组成的序列. wchar_t数据类型用来表示宽字符串,可能是16位或32位宽.这两种字符串都以NUL结尾.宽字符主要用来

地址/指针和字符串

今天做作业时,发现下列一个问题. 首页是这个自编的strncpy函数: #include "ctype.h" #include "stdlib.h" #include "string.h" #include "windows.h" int main() { char *strata(char s1[],char s2[],int n); char nam1[41]="das"; char nam2[41]=

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

浅谈运用指针引用字符串

一.字符串的引用方式 1.如果字符串存放在字符数组中可以用数组名和下标引用 char string[10] = "Hello word"; printf("%s",string); 2.用字符指针变量指向字符串常量,用字符指针引用字符串 char *strp = "Hello word"; printf("%s",strp); //系统将字符串常量以字符数组形式保存在内存中,字符串末尾系统自动加了一个'\0'.再将字符数组的首

用指针对字符串输入/输出

#include<iostream> using namespace std; int main(void) { char *s=new char[80]; cout<<"输入一个字符串: "; cin>>s; getchar(); cout<<"输入的字符串是:"; cout<<s; getchar(); delete []s; s=NULL; } s是一个字符型指针变量,通过new运算符申请一个动态数组

关于DELPHI数组,指针,字符串转换的例子!(转)

var   aa:   array [0..5] of Char;   bb:Pointer;   cc:string;   dd:PChar; procedure TForm1.Button1Click(Sender: TObject);begin dd:='abcdef'; //以下是pchar内容转数组FillChar(aa,length(dd),#0);Move(dd^,aa,SizeOf(aa)); //以下是数组传递到指针bb:=GetMemory(SizeOf(aa));Move(

DELPHI数组,指针,字符串转换的例子

关于数组,指针,字符串转换的例子 var   aa:   array [0..5] of Char;   bb:Pointer;   cc:string;   dd:PChar; procedure TForm1.Button1Click(Sender: TObject);begindd:='abcdef'; //以下是pchar内容转数组FillChar(aa,length(dd),#0);Move(dd^,aa,SizeOf(aa)); //以下是数组传递到指针bb:=GetMemory(S

第10章 菜单及其它资源_10.1 图标、鼠标指针、字符串等资源

10.1 图标.鼠标指针.字符串和自定义资源 10.1.1 向程序添加图标 (1)加载图标:(注意:第1个参数为hInstance,不能为NULL表示从程序本身加载) 图标ID为数字 ①wndclass.hIcon = LoadIcon(hInstance,MAXINTRESOURCE(IDI_ICON); ②wndclass.hIcon = LoadIcon(hInstance,MAXINTRESOURCE(125) 图标ID为字符串 ①wndclass.hIcon = LoadIcon(hI