当前位置: 首页 > news >正文

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

一、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类型取出,如果是数组类型,就按这个数组的类型,取出这个存放在数组里的数。所以强调不同的原因是因为它们的类型是不同的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenAI 刚刚推出 o1 大模型!!突破LLM极限
  • Ruby-SAML CVE-2024-45409 漏洞解决方案
  • 7.搭建个人金融数据库之快速获取股票列表和基本信息!
  • OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二)
  • 深度学习02-pytorch-04-张量的运算函数
  • 【计算机网络】运输层协议解析
  • 分布式锁优化之 使用lua脚本改造分布式锁保证判断和删除的原子性(优化之LUA脚本保证删除的原子性)
  • 全栈项目小组【算法赛】题目及解题
  • 《机器人SLAM导航核心技术与实战》第1季:第9章_视觉SLAM系统
  • Pandas简介
  • HTML5中新增元素介绍
  • 博图V16升级V19前后内存对比
  • 华为OD机试真题-IPv4地址转换成整数-2024年OD统一考试(E卷)
  • ESP32 入门笔记02: ESP32-C3 系列( 芯片ESP32-C3FN4) (ESP-IDF + VSCode)
  • 【Nginx】Nginx 监控详解
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Docker入门(二) - Dockerfile
  • HTTP那些事
  • JDK 6和JDK 7中的substring()方法
  • Mac转Windows的拯救指南
  • markdown编辑器简评
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • SOFAMosn配置模型
  • SQLServer之创建显式事务
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 电商搜索引擎的架构设计和性能优化
  • 坑!为什么View.startAnimation不起作用?
  • 如何胜任知名企业的商业数据分析师?
  • 什么是Javascript函数节流?
  • 我是如何设计 Upload 上传组件的
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 中文输入法与React文本输入框的问题与解决方案
  • 走向全栈之MongoDB的使用
  • Android开发者必备:推荐一款助力开发的开源APP
  • # wps必须要登录激活才能使用吗?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #php的pecl工具#
  • (1)(1.13) SiK无线电高级配置(六)
  • (java)关于Thread的挂起和恢复
  • (补)B+树一些思想
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (一)SpringBoot3---尚硅谷总结
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ****Linux下Mysql的安装和配置
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .axf 转化 .bin文件 的方法
  • .cfg\.dat\.mak(持续补充)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core 2.1路线图
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 验证控件和javaScript的冲突问题