发布日期:2015-12-30 11:47 来源: 标签: 编程语言 C教程 C语言字符指针变量 C语言字符数组
本章我们主要学习C语言中字符型指针变量与字符数组有什么区别?下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
1.概念
字符串是存放在字符数组中的,对字符数组中的字符逐个处理时,通常将字符串作为一个整体来使用,用指针来处理字符串更加方便。当用指向字符串的指针来处理字符串时,并不关心存放字符串的数组大小,而只关心是否已处理到字符串的结束符。
使用指针进行字符串的拷贝:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char strfrom[30]="i am a good student";
char strto[30]="0";
char *p1=strfrom;
char *p2=strto;
printf("kao bei qian \n ");
printf("strfrom is: %s\n",strfrom);
printf(" strto is: %s\n",strto);
for(;*p2++=*p1++;);
printf("kao bei hou \n ");
printf("strfrom is: %s\n",strfrom);
printf(" strto is: %s\n",strto);
return 0;
}
*p2++=*p1++ 等价于下列三条语句,
*p1=*p2; // s2[i]=s1[i],将指针p1所指s1[i]赋给指针p1所指s2[i]。
p1++; //指针p1加1指向s1的下一个元素
p2++; //指针p2加1指向s2的下一个元素
上述语句不断循环,直到p1指向结束字符'\0'=0时,for 语句因条件为假而结束。从而完成字符串s1拷贝到字符数组s2的任务。
2.字符型指针变量与字符数组的区别
(1)分配内存
设有定义字符型指针变量与字符数组的语句如下:
char *p ,str[50];
则系统将为字符数组str分配50个字节的内存单元,用于存放50个字符。而系统只为指针变量p分配4个存储单元,用于存放一个内存单元的地址。
(2)初始化赋值含义
字符数组与字符指针变量的初始化赋值形式相同,但其含义不同。例如:
char str[50] ="I am a student ! " ;
char *p="You are a student ! " ;
对于字符数组,是将字符串放到为数组分配的存储空间去,而对于字符型指针变量,是先将字符串存放到内存,然后将存放字符串的内存起始地址送到指针变量p中。
(3)赋值方式
字符数组只能对其元素逐个赋值,而不能将字符串赋给字符数组名。对于字符指针变量,字符串地址可直接赋给字符指针变量。例如:
str="I love C! "; //字符数组名str不能直接赋值,该语句是错误的。
p="I love C! "; //指针变量p可以直接赋字符串地址,语句正确
(4)值的改变
在程序执行期间,字符数组名表示的起始地址是不能改变的,而指针变量的值是可以改变的。例如:str=str+5; //错误
p=str+5; //正确

相关评论

专题信息
    C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。