字符数组和字符指针的区别

字符串指针与字符数组的区别 字符串指针字符串指针与字符数组的区别与字符数组的区别 转载 立即下载
字符数组和字符指针变量之间是有重要区别的,下面分别介绍这些区别。

字符数组是由若干个数组元素组成的,每个元素占用一个存储单元,保存一个字符。而字符串指针变量本身是一个变量,用来保存字符串常量的首地址。如果字符串指针变量没初始化而使用,将产生不可预料的后果。

例如:

char s[50]; 
 char *ps;
 scanf("%s",s); 
 scanf("%s",ps);

以上程序中,第1行定义了一个字符数组,编译器将会分配50个连续的存储单元。而第2行定义字符串指针变量,编译器只分配4个字节用来存放字符串常量的首地址,由于指针变量的值还未初始化,所以ps变量中的值还是未知的。第3行程序接收用户输入,并保存到数组s中,这是正确的。而第4行程序却带来问题,因为ps的值为未知的,而该语句将用户输入的内容保存到一个未知的内存区域,可能会使系统崩溃。因此,必须先对字符串指针变量进行初始化,使其指向一个确定的内存区域,然后才能使用。例如,可用以下方式初始化:

char s[80];
 char *ps=s;
 scanf("%s",ps);

前面曾反复提到,数组名是数组的首地址,是一个指针常量,确定存储位置后就不能改变。而字符串指针变量是一个变量,该变量保存的字符串常量首地址是可以改变的,即字符串指针变量可以指向不同的字符串常量,如图所示。当字符串指针变量ps指向第一个字符串常量时,变量ps就表示第一个字符串,当指向第二个字符串常量时,变量ps就表示第二个字符串。

 


例如:


char s[]="The Beijing 2008 Olympic Games"; 


是正确可行的,但以下语句却不能被编译:

char s[80]; s="The Beijing 2008 Olympic Games"; 


字符串常量只能在初始化数组时一次性保存到数组的各元素中。数组定义后,要改变字符数组的值,就只能逐个修改数组元素的值,例如,可以按以下方式对数组各元素分别赋值:


char s[80]; s[0]='T'; s[1]='h'; 


而对于字符串指针变量,可使用以下方式修改指针变量所指向的字符串常量:
char *s; 
 s="The Beijing 2008 Olympic Games"; 
 s=" One Word, One Dream!";

在程序执行过程中,可随时改变字符串指针变量的值,实质是将另一个字符串常量的首地址填入字符串指针变量中,使其指向新的字符串常量。


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


Win10系统内存占用异常飙升?三步排查法快速定位问题根源 本文针对Win10系统内存占用异常飙升问题,提供了一套三步排查法。首先利用任务管理器和资源监视器进行深度系统体检,定位隐形内存消耗者;其次通过干净启动和禁用非必要后台服务,揪出导致内存泄漏的第三方软件或驱动;最后进行终极深度清理,包括检查内存完整性、调整虚拟内存设置以及更新关键驱动程序,帮助用户快速恢复系统流畅运行。 阅读详情

相关推荐

华为AR6140E/S5735设备密码策略配置全攻略:从复杂度到锁定机制

本文详细介绍了华为AR6140E/S5735设备的密码策略配置方法,涵盖密码复杂度、时效性和防护性三大核心维度。通过具体的CLI命令示例,指导管理员如何设置密码长度、字符组合、有效期及登录失败锁定等安全机制,为企业网络提供全面的用户名密码防护策略。

weixin_30836759的博客 531

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

1.字符指针可以指向一个字符串。 我们可以用字符串常量对字符指针进行初始化。例如,有说明语句: char *str = "This is a string."; 是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。 这里要注意字符指针与字符数组之间的区别。例如,有说明语句: char string[ ]="This is a string."; 此时,string是字符数组,它存放了一个字符串。 字符指针str与字符数组string的区别是:str是.

一面之媛 6694

手把手教你用89C52单片机驱动0.96寸OLED(IIC接口,附完整代码)

本文详细介绍了如何使用89C52单片机通过I2C接口驱动0.96寸OLED显示屏,包括硬件连接、I2C通信原理、SSD1306驱动芯片的初始化及显存管理技巧,并提供了完整的代码示例和常见问题排查方法,帮助电子爱好者快速掌握OLED显示技术。

weixin_30781433的博客 370

字符指针变量与字符数组的区别

用字符数组和字符指针变量都能实现字符串的存储和运算,但二者之间是有区别的。 (1)字符数组由若干个元素组成,每个元素中存放一个字符,而字符指针变量中存放的是地址,绝不是将字符串存放到字符指针变量中。 (2)赋值方式 可以对字符指针变量赋值,但不能对数组名赋值。 char *a; a="I love China !"; //合法 char str[10]; str[0]='I'; //对字符数组中的元素赋值,合法 str="I

m0_62858660的博客 1621

ArduSub程序学习(1)——ardupilot框架整理

AP_HAL层(硬件抽象层)是我们制作 ArduPilot 的方式可移植到许多不同的平台。有一个顶级AP_HAL libraries/AP_HAL,用于定义代码其余部分的接口 有针对具体的板子特性,然后就有了AP_HAL_XXX 子目录,例如,AP_HAL_AVR 用于基于 AVR 的 开发板,AP_HAL_PX4用于 Pixhawk 开发板和 AP_HAL_Linux 基于 Linux 开发板。工具目录tools directories工具目录是杂项支持目录。

weixin_49839886的博客 2816

Blender - Shrinkwrap - 更方便的制作贴合模型的表面来建模

Shrinkwrap 修改器 使用 Blender 想要快速建模可以贴合现有模型表面的效果:衣服、皮肤、等效果,可以使用 Shrinkwrap 修改器,这个修改器的名字其实按照英文上的理解,翻译为:收缩的包裹效果 应用 如这块铁皮,它要贴合机身弯曲的效果,可以先建好一个铁皮,再 Shrinkwrap 到一个指定的网格上 留意的参数 Target 要贴合的对象(目前我已知是可以贴合到网格对象上,实在是方便) VertexGroup 顶点组,和之前讲到过的,顶点组可以组设顶点的权重,意思这个可.

Jave.Lin 的学习笔记 6072

char str[]与char *str的区别

在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[];二是使用字符指针。那么二者有什么区别呢?下面将分述二者的使用,最后进行比较。 一、字符数组         使用char str[]定义一个字符数组str,中括号内可以写上数字表示数组大小,也可以不写。如果不写数字,则必须为字符数组提供初始值,以便编译器进行内存分配。 可以使用字符串字面值(string

舒夜无痕--成为更好的自己 3万+

STM32F429网络通信避坑指南:用CubeMX搞定LAN8720+LWIP+FreeRTOS(附完整代码)

本文详细介绍了STM32F429通过CubeMX配置LAN8720+LWIP+FreeRTOS实现网络通信的避坑指南,涵盖硬件连接、CubeMX配置、LWIP优化及调试技巧,提供完整代码和实战经验,帮助开发者高效解决以太网通信中的常见问题。

weixin_26873711的博客 145

数组和指针的区别、字符数组和字符串指针区别

1、数组是数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。

gaosaixing的博客 2654

2025红队实战:Win11环境下ZAP、CobaltStrike与免杀套件深度评测

在网络安全领域,渗透测试与红队行动是评估系统防御能力的关键手段。其核心原理在于模拟真实攻击者的技术与流程,以发现潜在的安全漏洞。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、漏洞挖掘和攻防演练等场景。随着Windows 11系统普及,其增强的安全机制(如内存完整性、基于虚拟化的安全)对传统攻击工具链提出了新的挑战。本文聚焦于**CobaltStrike二开版**与**免杀套件**在Win11环境下的实战应用与深度对抗,探讨如何优化工具链以应对现代端点检测与响应(EDR)和高级

weixin_29315091的博客 308

STM32F030F4P6 ADC多通道定时器触发DMA搬运

主函数中等待转换完成的标志位,然后打印出来。ADC回调函数中将数值赋值给变量。配置定时器1s读一次。

qq_24426625的博客 1357

字符指针变量和字符数组的区别

C语言中,字符指针变量和字符数组都可以用来存储一串字符。但是,它们之间有以下几个区别: 内存分配方式不同:字符数组在定义时需要指定数组的长度,内存空间在编译时就被分配了;而字符指针变量在定义时只分配了一个指针变量的内存空间,指向字符串常量或者动态分配的内存空间。 大小可变性不同:字符数组的大小是固定的,无法动态改变;而字符指针变量可以通过重新指向不同的内存地址来改变其大小。 初始化方式不同:字符数组可以通过直接赋值的方式进行初始化;而字符指针变量可以通过指向字符串常量或者动态分配的内存空间来进行初始化

qq_41954181的博客 757

VT-Refine:基于仿真微调的视觉-触觉反馈双臂装配强化学习

本研究提出VT-Refine框架,通过融合真实世界示范、高保真触觉仿真与强化学习,解决高精度双臂装配任务。方法分为两阶段:首先利用少量人类示范数据预训练视觉-触觉扩散策略;随后在数字孪生仿真环境中进行强化学习微调。关键创新包括:开发GPU加速的触觉仿真模块精确模拟压阻式传感器;采用基于点云的多模态表征实现无缝的跨领域迁移。实验表明,该方法在五个双臂装配任务中显著提升性能,触觉反馈使成功率提高40%。研究首次实现仿真环境中的大规模双臂视觉-触觉强化学习及sim-to-real迁移,为接触密集型任务提供了新解决

2506_90492529的博客 1798

C语言 字符指针和字符数组的区别

前言 在日常敲代码的过程中我们会遇见这样一个问题 //例子1 void mian() { int a; scanf("%d", &a); } 例子1:这里我们看到,在为int a赋值的时候我们需要取a的地址对其赋值 void mian() { int dwCount; int* a = &dwCount; scanf("%d", a); } 例子2:这里我们换成一个指针,对指针int* a赋值,则不需要加取地址符号&,原因不难理解,上一个例子对a赋值需要其地址,所以我们

Huang_WeiHong的博客 1700

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

字符数组和字符串指针都可以用来存储字符串。除了形式上的区别,相差不大!给出一段代码#include<iostream> using namespace std; int main() { char a[10]="Hello!"; char *b="world!"; cout<<a<<endl; cout<<&a

weixin_41860749的博客 3537

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C语言 字符指针数组和二维字符数组的区别

对于下面的这段代码 #include <stdio.h> char *arr[5]; char s[5] = "11"; int main(void) { arr[0] = s; scanf("%s", s);//输入22 arr[1] = s; for (int i = 0; i < 2; i++) printf("%s ", arr[i]); retur...

默的博客 1789

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

字符指针 和 字符数组的区别

字符指针 即定义一个 char *s = "This is a char Pointer"; 字符数组 即定义一个char str[100] = ""This is a string"; 字符数组即字符串. 字符指针  和 字符数组的区别是: 字符指针中,指针所指向的内容为常量,即常量字符串,次字符串不可更改,存储在常量存储区,程序结束后由系统自动释放.但指针可更改,执行别处,比如: s=

Step By Step Gradually 798

c语言字符数组和字符指针,C语言 字符指针和字符数组的区别

char *str = "This is a string.";是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。这里要注意字符指针与字符数组之间的区别。例如,有说明语句:char string[ ]="This is a string.";此时,string是字符数组,它存放了一个字符串。字符指针str与字符数组string的区别是:str是一个变量,可...

weixin_26777941的博客 357

字符串指针变量和字符数组的区别

字符串指针变量和字符数组的区别

小郑在路上 353

C语言字符数组和字符指针的区别是什么?

C语言字符数组和字符指针的区别是什么?

致力于分享在各类技术领域的学习与实践经验,涵盖编程、虚拟化、开源工具、网络安全等。 463

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

字符串指针变量是一个变量,用于存放字符串的首地址;               字符数组是由若干个数组元素组成的,用于存放整个字符串。 不能对数组进行赋值,只能在初始化的时候,把字符串赋值给数组的各元素,赋值时只能对字符数组的各元素逐个赋值。定义字符数组时,编译系统为他分

876

数组和指针的区别_字符数组与字符指针的区别

这里介绍字符数组与字符指针的区别下面通过一个例子进行介绍char message1[] = "Hello"; char *message2 = "Hello";上面两个 message 的变量看起来好像是一样的,但实际他们的意义是不一样的,前者代表的是字符数组的初始化,后者则是一个字符指针指向一个字符串常量为了验证上面的说法,下面我们执行一些对这两个变量的操作message1++; // ERR,...

weixin_42131276的博客 130
上一篇: const形参的函数重载
下一篇: 【转载】C/C++中static、const的区别
wait009alone
博客等级 码龄15年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值