字符串与其声明_c语言声明字符串-程序员宅基地

技术标签: C  c语言  

一、定义

1、字符串

        字符串是以空字符(\o)结尾的char数组。

2、字符串常量

        字符串常量是指位于一对双引号之中的任何字符,双引号里的字符加上编译器自动提供的结束标志\0字符,作为一个字符串存储在内存中。字符串常量属于静态存储类。

PS.静态存储类:若在一个函数中使用字符串常量,即使多次调用了这个函数,这个字符串在整个程序运行的过程中只存储了一次,整个引号中的内容作为指向字符串存储位置的指针。

二、字符串的声明。

1、普通字符串的声明

(1)、以数组形式声明。

const Char heart[15]=”i love tillie!”;

        指定数组大小时,一定要确保数组元素数比字符串长度至少多1,未被使用的元素自动初始化为0。数组的大小必须是整形常量,而不是运行时得到的变量。

(2)、以指针形式声明。

Char *head=”i love millie!”;

        其作用和char head[]相同。

(3)说明。

        说明:若字符串之间没有间隔或者间隔是空格,ANSIC会将其串联起来。例如:

Char greeting[50]=”Hello,and” “how are” “you” “today”;

Char greeting[50]=”Hello,and how are you today”;

        以上两者是相等的。若想在字符串中使用双引号,可以在双引号前加上反斜线。

2、数组和指针声明的区别。

        以下列程序进行分析:

Char heart[]=”i love tillie!”;
Char *head=”i love millie!”;

数组 指针
类型 heart是地址常量,不能更改

head是个变量

标识下一个元素

可使用heart+1来标识下一个元素,但是不能++heart.。

可使用heart+1来标识下一个元素,也可以用++heart.。
赋值 不允许用指针给常量赋值。

可以用常量名给指针赋值,head=heart。

存储

数组初始化就是从静态存储区把一个字符串复制给数组。

针初始化只复制字符串的地址

更改元素

heart是常量,但是数组中的元素是变量,因此可以改变heart中存储的信息,方法是访问单个数组元素:heart[7]=’M’;或者*(heart+7)=’M’。

不允许用指针进行这样的操作,因为存储方式不同,因此初始化一个指向字符串文字的指针时使用const修饰符。

共同点:两者都可以使用数组符号和指针运算符。

3、字符串数组。

(1)、以指针形式建立字符串数组。

const char *shuzu[5]={“Adding numbers swiftly”,
                        “Multiplying accurately”,
                        “Stashing data”,
                        “following instructions to the letter”,
                        “understanding the c language”};

        shuzu是一个由五个指向char的指针组成的数组。也就是说,mytal是个一维数组,而且数组里的每一个元素都是一个char类型的地址。第一个指针是shuzu[0],它指向第一个字符串的第一个字符。第二个指针是shuzu[1],它指向第二个字符串的开始。

        mytal实际上不存放字符串,只存放字符串的地址(字符串存在程序用来存放常量的那部分内存中)。shuzu[0]就是第一个字符串,*shuzu[0]==shuzu[0][0]是第一个字符串的第一个字符。

(2)、以二维数组的形式建立字符串数组。

Char shuzu_2[5][81];

        这里的shuzu是一个5个元素的数组,每一个元素本身又是一个81个char的数组。在这种情况下,字符串本身也存储在数组里。

(3)、两者的区别

        a、二维数组建立了一个所有行的长度都相同的矩形数组,但是指针数组建立的是不规则数组,每一个长度都由初始化字符串决定,不浪费任何存储空间。

        b、shuzu和shuzu_2的类型不同,shuzu是指向char的指针数组,存放5个地址;但shuzu_2是char数组的数组,存放5个完整的字符数组。

4、指针和字符串        

int main(void)
{
    char *mesg="don't be a fool!";
    char *copy;
    
    copy=mesg;
    printf("%s  %p  %p\n",mesg,&mesg,mesg);
    printf("%s  %p  %p\n",copy,&copy,copt);
    return 0;
}

输出结果:don't be a fool!  0x0012ff48  0x0040a000
         don't be a fool!  0x0012ff44  0x0040a000

        &copy输出的是指针的地址,%p是输出地址的转义字符。最后一项是指定指针的值,指针的值是指针中存放的地址,也由此看出字符串没有被复制,只是产生指向同一个字符串的第二个指针。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44377089/article/details/126178671

智能推荐

在Windows平台上安装MRTG流量监控软件_mrtg 下载-程序员宅基地

文章浏览阅读188次。打开MRTG软件包中的"MRTG.cfg"文件,该文件是MRTG的主配置文件。打开MRTG软件包中的"MRTG.cfg"文件,该文件是MRTG的主配置文件。确保将命令中的"C:\MRTG"替换为你的MRTG安装目录和配置文件路径,"community"替换为你的SNMP团体字符串,"device_ip"替换为目标设备的IP地址。确保将命令中的"C:\MRTG"替换为你的MRTG安装目录和配置文件路径,"community"替换为你的SNMP团体字符串,"device_ip"替换为目标设备的IP地址。_mrtg 下载

kaggle简单使用教程(代码查找.下载、项目建立.运行、参加比赛)_kaggle在线写代码-程序员宅基地

文章浏览阅读1w次,点赞7次,收藏35次。Kaggle机器学习竞赛、托管数据库、编写和分享代码_kaggle在线写代码

network.service - LSB: Bring up/down networking_network.service - lsb: bring up/down networking lo-程序员宅基地

文章浏览阅读3.1k次,点赞11次,收藏14次。CentOS7突然连接不了网络,使用systemctl status network后报如下错误network.service - LSB: Bring up/down networkingLoaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)Active: failed (Result: exit-code)【解决方案】停止NetworkManager并取消开机启动chkconfig NetworkMan_network.service - lsb: bring up/down networking loaded: loaded (/etc/rc.d/in

GitHub上10个有趣的开源小游戏(附加在线演示)_github开源小游戏-程序员宅基地

文章浏览阅读4.9w次,点赞312次,收藏1.3k次。前言GitHub作为程序员们的开源宝库,有着很多非常好的项目。对于初学者来说,游戏有着一种特殊的魅力。今天统计了GitHub上比较有趣的10个开源小游戏,其中有许多可以称之为经典。笔者是一名90后,《贪吃蛇》、《坦克大战》、《超级马里奥》和《太空侵略者》作为儿时的玩伴,陪伴笔者度过了很多时光,给笔者带来了非常多的回忆。1、Pacman(吃豆人游戏)项目演示地址: https://passe..._github开源小游戏

Java数据结构和算法(十二)——2-3-4树,java面试题,java高级笔试题_树查找 java 笔试题-程序员宅基地

文章浏览阅读210次。写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。扫码加微信好友进【程序员面试学习交流群】,免费领取。也欢迎各位一起在群里探讨技术。通过前面的介绍,我们知道在二叉树中,每个节点只有一个数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树。本篇博客我们将介绍的——2-3-4树,它是一种多叉树,..._树查找 java 笔试题

随便推点

HttpClientUtils工具类-程序员宅基地

文章浏览阅读1.5k次。HttpClientUtils工具类。_httpclientutils

3D单目(mono 3D)目标检测算法综述_mono3d-程序员宅基地

文章浏览阅读1.1w次,点赞12次,收藏105次。layout: posttitle: 3D单目(mono 3D)目标检测算法综述date: 2021-01-22 22:08:39.000000000 +09:00categories: [算法篇]tags: [CV, 3D, 综述]欢迎访问个人博客:https://johneyzheng.top/前言算法调研(相对完善)2D升3D问题表达形式(Representation transformation): BEV, Pseudo-Lidar关键点&&形状通过2._mono3d

YOLO V8车辆行人识别_yolov8 无法识别路边行人-程序员宅基地

文章浏览阅读537次。与其他目标检测方法相比,YOLO V8拥有更高的速度和更好的准确率,它能够在实时视频流中运行,并且可以同时检测多个目标。我们可以使用Keras或TensorFlow等框架来实现模型,并使用OpenCV来进行车辆检测。我们将图片缩放为128x128像素的大小,并使用预训练的模型来进行车辆检测。在车辆识别中,我们需要训练一个针对车辆的模型。首先,我们需要准备一组包含车辆的图片,并标注车辆的位置和大小。我们可以使用OpenCV来读取图片,并使用YOLO V8模型来进行车辆检测。_yolov8 无法识别路边行人

jpa mysql分页_Spring Boot之JPA分页-程序员宅基地

文章浏览阅读141次。JPA分页​当请求的数据总量很大时,这时候前端往往都会要求后端将数据分页返回。本文介绍SpringBoot下后端数据层使用JPA+MySQL时,如何分页返回数据(除了当前页面的数据,往往还要返回总页数这项数据)。一、从头到尾自己实现分页:Controller层:使用@RequestParam绑定page和pageSize参数,调用ServiceService层:接收page、pageSize参数,..._jpa mysql limit 分页

win10打印图片中间空白以及选择打印机预览重启_win10更新后打印图片中间空白-程序员宅基地

文章浏览阅读7.6k次。当月10号左右大量windows10系统发现打印照片时只能打印出头和尾,如下还有没开始打印,一选择打印机电脑就重启,是因为微软发布的新补丁不兼容,卸载最近更新的补丁即可(不同系统版本补丁编号是不一样的,看最近日期就行了)打开控制面板-卸载程序查看已安装的更新按时间排序双击卸载最新的补丁重启即可..._win10更新后打印图片中间空白

【加密】SHA256加盐加密_sha256随机盐加密-程序员宅基地

文章浏览阅读2.4k次。SaltUtil 类 private final String algorithmName = "SHA-256"; private final int hashIterations = 10000; private static RandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator(); //默认16位……//方法中调用// 生成salt model.se_sha256随机盐加密