博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言基础学习5:字符串与指针
阅读量:6595 次
发布时间:2019-06-24

本文共 1705 字,大约阅读时间需要 5 分钟。

1、字符串的表示形式

(1)用字符数组存放一个字符串,然后输出该字符串。

char string[] = "I am happy";printf("%s",string);

(2)用字符指针指向一个字符串。

char *string = "I am happy";printf("%s",string);

2、字符指针作函数参数

(1)用字符数组作参数

void CopyString(char from[], char to[]){    int i = 0;    while(from[i]1='\0')    {        to[i] = from[i];        i++;    }    to[i] = '\0';}

(2)形参用字符指针变量

void CopyString(char *from, char *to){    for(;*from!='\0';from++,to++)        *to = *from;    *to = '\0';}

上述函数还可以有一下变形:

变形1:

void CopyString(char *from, char *to){    while((*to = *from)!='\0')    {        to++;        from++;    }}

变形2:

void CopyString(char *from, char *to){    while((*to++ = *from++)!='\0')}

也可以写成如下形式:

void CopyString(char *from, char *to){    while(*to++ = *from++)}

变形3:

void CopyString(char *from, char *to){    while(*from++!='\0')        *to++ = *from++;    *to = '\0';}

也可以写成下列形式:

void CopyString(char *from, char *to){    while(*from++)        *to++ = *from++;    *to = '\0';}

变形5:

函数体中while语句也可以写成:

for(;(*to++=*from++)!='\0';);
for(;*to++=*from++;);

3、对使用字符指针变量和字符数组的讨论

(1)字符数组由若干个元素组成,每个元素中放一个字符;而字符指针变量中存储的是地址(字符串中第一个字符的地址),绝不是将字符串放到字符指针变量中。

(2)赋值方式。字符指针可以分开写,字符数组则不行。

char str[15] = "I am happy";char *p;p = "I am happy";

(3)如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。

例如:

char str[10];scanf("%s",str);

上述是可以的。

但是像下面这种情况

char *p;scanf("%s",p);

是危险的,p的值是无法预料的可能指向空白的用户存储区,也可能指向以存放指令或数据的有用内存段,这就会破坏程序,破坏系统。可以做以下修改:

char *p,str[10];p = str;scanf("%s",p);

(4)指针变量的值是可以改变的。而字符数组的数组名虽然也代表地址,但是一旦定义后它就是常量,不能改变。

(5)用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。

char *format;format = "a=%d,b=%d\n";printf(format,a,b);

转载于:https://www.cnblogs.com/iambitiousman/p/3855674.html

你可能感兴趣的文章
正则表达式的应用
查看>>
46、android studio第一次使用时卡在gradle下载怎么解决?
查看>>
C# 字符大小转换及 remove,substring,replace
查看>>
CentOS 6.7安装Docker
查看>>
UML类图与类的关系详解
查看>>
05构建之法阅读笔记之五
查看>>
POJ3189 Steady Cow Assignment ——二分答案+二分图多重匹配——Pku3189
查看>>
浅谈算法——莫比乌斯函数,莫比乌斯反演和杜教筛
查看>>
Failed at the bitcore-node@3.1.3 preinstall script './scripts/download' 设置linux proxy (代理)的方式...
查看>>
javascript深入理解js闭包
查看>>
条件修饰词
查看>>
CSS3圆角详解
查看>>
可变对象与不可变对象
查看>>
第四次作业
查看>>
lucas定理
查看>>
poj2975 Nim 胜利的方案数
查看>>
Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
查看>>
asp.net中chart中如何插入table实现混合显示
查看>>
显示隐藏文件的批处理!
查看>>
makemigrations 和 migrate工作原理分别是什么
查看>>