C语言基础学习5:字符串与指针
2014-07-20 00:11
281 查看
1、字符串的表示形式
(1)用字符数组存放一个字符串,然后输出该字符串。
(2)用字符指针指向一个字符串。
2、字符指针作函数参数
(1)用字符数组作参数
(2)形参用字符指针变量
上述函数还可以有一下变形:
变形1:
变形2:
也可以写成如下形式:
变形3:
也可以写成下列形式:
变形5:
函数体中while语句也可以写成:
3、对使用字符指针变量和字符数组的讨论
(1)字符数组由若干个元素组成,每个元素中放一个字符;而字符指针变量中存储的是地址(字符串中第一个字符的地址),绝不是将字符串放到字符指针变量中。
(2)赋值方式。字符指针可以分开写,字符数组则不行。
(3)如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。
例如:
上述是可以的。
但是像下面这种情况
是危险的,p的值是无法预料的可能指向空白的用户存储区,也可能指向以存放指令或数据的有用内存段,这就会破坏程序,破坏系统。可以做以下修改:
(4)指针变量的值是可以改变的。而字符数组的数组名虽然也代表地址,但是一旦定义后它就是常量,不能改变。
(5)用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。
(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);
相关文章推荐
- C语言学习之 数组,指针,字符串. (三)
- C++基础教程 学习笔记(二) 数组、字符串和指针
- C_PlusPlus学习笔记 - 5_数组、指针和字符串 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- 黑马程序员——C语言基础学习(四)---数组和指针的总结学习
- (三)JNI学习之C语言基础,指针
- 黑马程序员——零基础学习iOS开发——06 字符串、指针、指针和数组、指针和字符串、指针和函数
- 奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记之二
- C语言基础知识之(十四):指针和字符数组、字符串数组
- C语言基础:C语言指针(6) - 指针和字符串
- C语言基础-指针与字符串19
- Go语言学习二:Go基础(变量、常量、数值类型、字符串、错误类型)
- C语言基础学习9:指向指针的指针
- C语言基础学习4:数组与指针
- C语言基础学习——第5天(指针)
- c语言基础--数组和指针---字符串
- C语言基础:指针类型与指针和数组、字符串的关系
- C语言基础学习7:返回指针值的函数
- C语言基础学习8:指针数组
- 【C/C++语言基础学习】在主函数的定义的指针数组、二维数组通过三级指针在被调用函数分配内存
- Ruby语言基础学习七:Ruby字符串、数组、