C语言中数组和字符串的联系

news2024/9/23 5:44:27

一、C语言中,数组和字符串

  • 1、C语言中,定义一个数组后,数组名保存的是这个数组的首地址。类似一个指向数组第一个元素的指针,但是这个指针不能重新指向。
  • 2、字符串在C语言中是通过字符数组来实现的,也就是说字符串还是保存在数组里面的。字符串实际上是一个字符序列,它以空字符(null character,即\0)作为结束标志。这意味着在C语言中,当你声明一个字符串时,你需要为这个空字符预留一个额外的位置,因为字符串的长度(不包括结尾的空字符)和数组的大小之间有一个单位的差异。
char greeting[6] = "Hello"; // 这是不正确的,因为数组大小不足以存储结束符'\0'  
char greeting[7] = "Hello"; // 正确的,'\0'会被自动添加到数组的末尾
char greeting[] = "Hello";  
char *ptr = greeting;  
printf("%c\n", *ptr); // 输出 'H'

二、数组名相关的打印内容

#include "stdio.h"

int main() {
    char greeting[] = "Hello";
    char *ptr = greet;
//    printf("%c\n", *ptr); //
    printf("指针使用s: %s\n", ptr); //  指针指向数组名, 打印这个指针的值,格式化输出的是字符,就打印出这个字符的内容
    printf("指针使用p:  %p\n", ptr); //  指针指向数组名,打印这个指针的内容,格式化输出的是地址,就打印出这个字符的地址
    
    printf("指针加上求地址符的p:  %p\n", &ptr); //   这个打印出来的是指针的地址。

    printf("变量名使用s:  %s\n", greet);
    printf("变量名使用p:  %p\n", greet);

    printf("变量名加上求地址符的地址: %p\n", &greet); 


    return 0;
}

在这里插入图片描述

  • 可以看出数组变量名本身就可以当成一个保存元素地址的变量

  • 容易混淆的地方:数组名greet的使用

  • 1、如果对这个变量使用求地址符,&greet,这个值和ptr的值一样,并不是ptr地址的地址。greet是第一个元素的地址,&greet是这个数组的地址。

    • 如果用一个指针先指向数组名,再求地址,结果就不一样了,结果就是greet地址的地址
  • 2、数组名保存的地址,是第一个元素的地址,这个也很模糊。我们说的 数组的地址和数组第一个元素的地址,这两个地址打印出来是一样的。那为什么要强调这两个地址的不同呢?

因为指针不仅要确认指向的地址的开头,还要确认这个地址怎么解析。如果是char类型,就按char类型取出,如果是数组类型,就按这个数组的类型,取出这个存放在数组里的数。所以强调不同的原因是因为它们的类型是不同的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Fyne ( go跨平台GUI )中文文档-小部件 (五)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章: Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

[SAP ABAP] 创建数据库视图和维护视图

数据准备 学校表(ZDBT_SCH_437) 学生表(ZDBT_STU_437) 学校表(ZDBT_SCH_437)与学生表(ZDBT_STU_437)字段 学校表(ZDBT_SCH_437)与学生表(ZDBT_STU_437)行数据明细 1.创建数据库视图 使用SE11创建数据库视图 填写视图名称ZV_DATABASEV_437,点击创建按钮 选择数据库视…

Linux——应用层协议HTTP

目录 前言 一HTTP协议 1认识URL 2urlencode 和 urldecode 3协议请求与响应格式 4代码实现 二HTTP常见Header 1Connection的报头 2Cookie和Session 2.1Cookie定义 2.2Cookie使用 2.3Session定义 2.4Session实现 四HTTP响应起始行 1状态码 2永久重定向与临时重定…

# wps必须要登录激活才能使用吗?

WPS 必须登录激活才能使用吗? 如下图,当我们使用WPS时,不登录会显示工具栏灰色不可用状态。 答:WPS 不一定要登录激活才能使用。 一、免费使用的情况 1、基础功能 在不登录的情况下,用户可以使用 WPS 的一些基础功…

模板:JDBC 连接数据库并实现 CRUD

目录 前期准备: 1. 连接数据库 1.1 第一种 1.2 第二种 2. 增加 3. 修改 4. 删除 5. 查询 5.1 查询某个记录 5.2 查询单列数据 使用时,直接复制再修改一些数据即可; 声明:在对文件/变量命名时,没有做到见名知…

鸿蒙设置,修改APP图标和名称

1、先看默认的图标和名称 2、打开项目开始设置自己需要的图标和名称 2.1找到 路径src\main\module.json5, 找到 abilities,下的,图标icon、名称label,label可以按住ctrl鼠标左键点击跳转 2.2先修改APP名称 1、ctrl鼠标左键点击…

Redis 字符串类型的典型应用场景

目录 1. 缓存功能 2. 计数功能 3. 共享会话(Session) 4. 手机验证码 前言 这里将详细介绍 Redis 字符串类型在实际开发中的几个典型应用场景,并提供相应的伪代码示例。 1. 缓存功能 场景描述 在许多Web应用中,数据通常需要…

【在Linux世界中追寻伟大的One Piece】验证TCP

目录 1 -> 验证TCP-windows作为client访问Linux 1.1 -> TCP client样例代码 1 -> 验证TCP-windows作为client访问Linux 1.1 -> TCP client样例代码 #include <winsock2.h> #include <iostream> #include <string>#pragma warning(disable : …

什么是Rspack?

Rspack 是一个基于 Rust 编写的高性能 JavaScript 打包工具&#xff0c;旨在提供与 webpack 生态系统的强兼容性&#xff0c;允许无缝替换 webpack&#xff0c;并提供极快的构建速度。 介绍 - Rspack 它由字节跳动 Web Infra 团队孵化&#xff0c;具有以下特点&#xff1a; 高…

JS渲染锻炼输入表单

前言 上篇文章为大家展现了好看的信息窗口&#xff0c;接下来我们跟着流程图看下一步 之前我们的带点击事件已经添加完毕&#xff0c;下一步就是当用户点击的时候&#xff0c;渲染锻炼形式&#xff0c;当然这是一个标签&#xff0c;可以提供给用户输入锻炼形式 实例 ● 我…

Codeforces Round 969 (Div. 1) C. Eri and Expanded Sets(线段树维护差分数组gcd+双指针+尺取)

题目 转化一下题意就是&#xff0c; 给定一个n(n<4e5)&#xff0c;代表数组a的长度&#xff0c; 求有多少区间&#xff0c;满足区间内两两差分后得到的新数组的gcd∈{0,1} 实际t(t<1e4)组样例&#xff0c;保证sumn不超过4e5 思路来源 乱搞acjiangly代码 题解 一个…

C/C++内存管理 ——

目录 五、C/C内存管理 1、C/C内存分布 2、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3、C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 1.内置类…

SSM框架学习(四、SpringMVC实战:构建高效表述层框架)

目录 一、SpringMVC简介和体验 1.介绍 2.主要作用 3.核心组件和调用流程理解 4.快速体验 二、SpringMVC接收数据 1.访问路径设置 &#xff08;1&#xff09;精准路径匹配 &#xff08;2&#xff09;模糊路径匹配 &#xff08;3&#xff09;类和方法上添加 RequestMapp…

CSP-J 2024 入门组初赛第一轮初赛试题及答案解析

CSP-J 2024 入门组初赛第一轮初赛试题及答案解析 一、 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 1 32 位 int 类型的存储范围是&#xff08; &#xff09; A -2147483647 ~ 2147483647 B -21…

【QGIS入门实战精品教程】6.1:QGIS根据属性条件查询数据(SQL表达式)

文章目录 一、字段过滤二、高级过滤(表达式)一、字段过滤 对于单个字段的查询,可以采用字段过滤,例如,从县区数据中,根据NAME字段,查找出县级市玉门市。操作为:右键县区→打开属性表: 点击左下角,选择name字段。 输入玉门市,回车,选择查找除的属性表记录,此时图斑…

汽车总线之----FlexRay总线

Introduction 随着汽车智能化发展&#xff0c;车辆开发的ECU数量不断增加&#xff0c;人们对汽车系统的各个性能方面提出了更高的需求&#xff0c;比如更多的数据交互&#xff0c;更高的传输带宽等。现如今人们广泛接受电子功能来提高驾驶安全性&#xff0c;像ABS防抱死系统&a…

计算机毕业设计之:基于深度学习的路面检测系统(源码+部署文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【redis-02】深入理解redis中RBD和AOF的持久化

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756 如需转载&#xff0c;请输入&#xff1a;htt…

2025校招内推-招联金融

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

CentOS Stream 9部署docker,并开启API

1、安装docker &#xff08;1&#xff09;安装Docker的依赖项和存储库 sudo dnf install -y dnf-plugins-core sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &#xff08;2&#xff09;安装Docker sudo dnf install -y docke…