0

0

字符串指针与字符数组的区别

高洛峰

高洛峰

发布时间:2016-12-12 17:22:23

|

2358人浏览过

|

来源于php中文网

原创

    用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:

1.     字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。

2.     对字符串指针方式

char *ps="C Language";

可以写为:

    char *ps;

ps="C Language";

而对数组方式:

    static char st[]={"C Language"};

不能写为:

    char st[20];

    st={"C Language"};

而只能对字符数组的各元素逐个赋值。

     从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。

当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。
一个错误的例子,如下:       
           char *name;
           scanf("%s",name);
           printf("%s",name); 
 有的编译器虽然也能通过,但这是错误的,因为是个指针,定义时指向不可用的地址。解决这个问题有两种方法:用数组的方法或给字符针针分配内存空间的方法。
           数组的方法:
                 char name[20];
                 scanf("%s",name);
                 printf("%s",name); 
     
        给字符针针分配内存空间的办法: 
                 char *name;
                 name=(char*)malloc(50);      //此时name已经指向一个刚刚分配的地址空间。
                 scanf("%s",name);
                 printf("%s",name);

但是对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。

索特旅游线路发布管理系统VIP版
索特旅游线路发布管理系统VIP版

一套专门解决旅行社网上预定、发布、管理线路的强大系统,系统基于ASP+ACCESS数据库开发,功能强大,操作方便,系统设计完全符合旅行社的运做模式。系统着重体现易操作性,只要您会打字,便操作。系统由以下几个模块组成:1、线路的类别发布和管理2、线路的发布和管理3、线路的属性管理(是精品线路、还是普通线路)4、客户预定线路订单管理,人性化的区分为未处理订但和处理订单5、线路查询功能6、网站留言功能,

下载

3.int  main()

{ char str1[40]="hello world!";    
 //char *str1="hello world!"; 
 str1[4]='A';                
      //若str1是指针型的,编译通过,但运行是此处会段错误
       printf("%s\n",str1); 
       return 0;
        }

       数组和指针都可以在它们的定义中用字符串常量进行初始化,尽管看上去一样,底层的实现机制却不相同。

       定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义的同时赋值给指针一个字符串常量进行初始化。例如:下面的定义创建了一个字符串常量(为其分配了内存):

       char *p=”abcdefg”;

       注意只有对字符串常量才是如此,不能指望为浮点数之类的常量分配空间,如:

       Float *p=3.14;  /*错误,无法通过编译*/

下面结合一个实例谈谈初始化指针时创建的字符串常量与数组中的字符串的区别:

在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。

数组也可以用字符串常量进行初始化:

       Char a[]=”abcdefg”;

       如指针相反,由字符串常量初始化的数组是可以修改的。其中的单个字符在以后可以改变。

       下面是一个在vc6中的一个例子,完成将一个字符串中的所有大写字母全部转换为小写字母的功能:

View Code  
  #include  
 #include  
    
   /******************************************************************************/  
  /* 
   *    Convert a string to lower case 
   */  
    
  int strlower(char *string)  
 {  
     if(string==NULL)  
     {  
         return -1;  
     }  
   
     while(*string)  
     {  
         if(isupper(*string))  
             *string=tolower(*string);  
         string++;  
     }  
     *string='\0';  
     return 0;  
 }  
 /*char *strlower(char *string) 
 { 
     char    *s; 
  
      
  
     if (string == NULL) { 
         return NULL; 
     } 
  
     s = string; 
     while (*s) { 
         if (isupper(*s)) { 
             *s = (char) tolower(*s); 
         } 
         s++; 
     } 
     *s = '\0'; 
     return string; 
 } 
 */  
   
 void main()  
 {  
     char *test="ABCDEFGhijklmN";  
     strlower(test);  
     cout<

其中,如果采用char *test=”ABCDEFGhijklmN”;会产生运行时错误。Char test[]=”ABCDEFGhijklmN”则程序正常运行,原因如前所述。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

88

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

90

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

61

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

493

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

16

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

php初学者入门课程
php初学者入门课程

共10课时 | 0.6万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号