首页 > 其他分享 >C语言第17天,字符串与字符指针

C语言第17天,字符串与字符指针

时间:2022-09-24 15:24:30浏览次数:54  
标签:字符 pTail 数组 17 C语言 char str 字符串 指针

1.字符串常量不可修改

#include<stdio.h>

int main()

{char*pStr="HelloWorld\n";

printf("%s",pStr);

pStr[0]='h';//将H变为h

printf("%s",pStr);

return 0;}

我们知道字符串常量实际上是一个字符数组,因此"HelloWorld\n"的类型为char[12]的字符数组。

而数组出现在表达式中,将转换为指向首元素的指针char*。即pStr指向字符串常量的第一个元素'H'。之后,我们尝试将第一个字符从'H'修改为'h'。运行后程序报错了。

结论:字符串常量是常量,而常量不能被修改。

 

2.正确初始化字符数组

//初始化列表长度小于字符数组长度

char str1[10]={'H','e','l','l','o'};//前5个元素被初始化为'H'、'e'、'l'、'l'、'o',其后所有的元素填0

char str2[10]={'H','e','l','l','o','\0'};//\0可以正常结尾

 

//初始化列表等于字符数组长度

char str3[6]={'H','e','l','l','o','\0'};//正常结尾

char str4[5]={'H','e','l','l','o'};//没有\0的位置,无法正常结尾

 

//使用字符串初始化字符数组

char str5[10]="Hello";//正常结尾

char str6[6]="Hello";//正常结尾

char str7[5]="Hello";//没有\0的位置,无法正常结尾

 

//省略字符数组大小

char str8[]={'H','e','l','l','o','\0'};//正常结尾

char str9[]={'H','e','l','l','o'};//没有\0无法正常结尾

char str10[]="Hello";//正常结尾,字符数组长度由字符串常量决定。字符数组长度为6。使用字符串常量初始化字符数组。

 

3.字符数组可修改

#include<stdio.h>

int main()

{char str[]="HelloWorld\n";

printf("%s",str);

 

str[0]='h';

printf("%s",str);

return 0;}

结果修改成功,所以字符数组str是可以被修改的。

 

4.字符数组与指针

#include<stdio.h>

int main()

{char str[]="helloworld";

puts(str);

for(int i=0;str[i] !='\0'; i++)

{str[i] - =32;}

puts(str);

return 0;}

结果为helloworld

HELLOWORLD

 

此外,我们还可以获取字符数组的首元素指针,通过指针的加法来访问并修改这个字符数组。

#include<stdio.h>

int main()

{char str[]="helloworld";

char*p=str;

while(*p!='\0')

{*p -= 32; p++;}

puts(str);

return 0;}

指针p为一个移动的游标,依次指向数组中的每一个元素。循环结束后,指向字符'\0'。

 

5.使用指针处理字符串

将字符串"dlrowolleh"倒转过来,还原为"helloworld"。

#include<stdio.h>

int main()

{char str[]="dlrowolleh";

puts(str);

//使用两个指针,pHead指向首元素'd',pTail指向尾部的'h'。

char*pHead=str;

char*pTail=str;

 

while(*pTail)

{pTail ++;}//指向末尾

pTail --;

while(pHead<=pTail)

{char tmp=*pHead;

*pHead=*pTail;

*pTail=tmp;//交换位置

pHead ++;//前进1

pTail --;}//后退1

 

puts (str);

return 0;}

标签:字符,pTail,数组,17,C语言,char,str,字符串,指针
From: https://www.cnblogs.com/mmwl/p/16725690.html

相关文章

  • C语言的一些有用设计
    一安装进度条:1#include<stdio.h>2#include<string.h>3#include<unistd.h>45voidProcBar()6{7inti=0;8......
  • C C++指针面试题零碎整理
    最基础的指针如下:inta;int*p=&a;答:p指向a的地址,&是取a的地址。*指的是指针中取内容的符号。2.str[]和str*的区别:charstr1[]="abc";charstr2[]="abc";c......
  • P5356 [Ynoi2017] 由乃打扑克
    纪念一下人生第一道Ynoi题目链接题意是个人都看得懂吧。。。。。。solution看到Ynoi,想到什么?分块卡常......
  • 准备维护 Aegisub 先介绍编译 win10 64 vs2017
    起因是,现在开始做翻译,发现这个软件在WIN上面显示很模糊,没有适配高DPI显示,看了从2014年后,官方就不在发布新版本了,为了自己用着舒服,也为了广大的字幕影视爱好者。所......
  • C语言递归汉诺塔
    #include<stdio.h>intmain(){voidhanoi(intn,charone,chartwo,charthree);intm;printf("Inputthenumberofdiskes:");scanf("%d",&m);......
  • C#教程 - 不安全的代码和指针(Unsafe Code and Pointers)
    更新记录转载请注明出处:2022年9月24日发布。2022年9月10日从笔记迁移到博客。平台互操作说明C#通过4种方式实现直接调用外部代码:通过平台调用(PlatformInvoke,P......
  • C语言:求1/2,2/3,3/5,5/8,8/13,13/21,21/34...前20项和
    #include<stdio.h>//求1/2,2/3,3/5,5/8,8/13,13/21,21/34...前20项和main(){inta,c=1;doublesum=0,b=1.0,d,e,f=1,g=2;for(a=1;a<=20;a++){......
  • 用vscode写C语言调试常见错误及其解决方法
    下载mingw,添加系统变量(可以解决头文件报错问题),下载插件就不说了。新建一个文件夹,命名为.vscode,在这个文件夹下方,添加三个jsion文件(更改代码),配置好后,添加C文件(最好不要同......
  • C语言学习第六天
    今天主要学习了数据类型数据类型分为算数类型和字符类型算术类型包括整型和浮点数,整型分为有符整型和无符整型深入了进制转换的知识,拓展了%u%x%o和字符串中的%c扩展......
  • 野指针
    原文https://homepea.top/2020/24.C-point/空指针空指针:指针指向的地址为空的指针叫空指针/NULL指针int*p1;p1=NULL;char*p2;p2=NULL;野指针当所指向的对......