字符指针变量和字符数组的讨论

指针进阶之字符指针(超详细) 指针进阶之字符指针,讲到懂 阅读详情
/**
*	经常会弄错字符指针变量和字符数组的使用方式 
*	写在这里方便查阅 :
* 
*	(1)内容不同:
*		字符数组由若干个元素组成,每个元素放一个字符。
*		而字符指针变量中存放的是地址(字符串第一个字符的地址),决不是将字符串放到字符指针变量中。
* 
* 	(2)赋值方式: 
* 		对字符数组只能对各个元素赋值,不能用以下方法: 
* 			char str[14]; 
* 			str="I love China!";//************错误的赋值方式!**************
* 		而对字符指针变量,可以用以下方法: 
* 			char *a; 
* 			a="I love China!";//***赋给a的不是字符,是字符串的第一个元素***
* 
* 	(3) 初始化: 
* 		对数组的初始化:--数组可以在定义时整体赋初值,但不能在赋值语句中整体赋值 
*			char str[14]={"I love China!"}; 
*			不等价于
*			char str[14];
*			str[]="I love China!";
*		对字符指针变量赋初值:
*			char *a="I love China!";
*			等价于	
*			char *a;
*			a="I love China!"; 
*
*	(4) 地址分配: 
*		如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址 。 
* 
*		而定义一个字符指针变量时 ,给指针变量分配内存单元,在其中可以放一个 
*	字符变量的地址, 但如果未对它赋予一个地址值,则它并未具体指向一个确定的 
*	字符数据。
*		例如: 
* 			char str[10];
* 			scanf("%s",str);//正确 
* 
*			char *a;
*			scanf("%s",a);//错误!!!a的地址是不可预料的
*		改正: 
*			char *a,str[10];
* 			a=str;
* 			scanf("%s",a);
*			先使a有确定的值,也就是使a指向一个数组的首元素,然后输入一个字符串, 
*		把它存放在以该地址开始的若干单元中。 
*	
*	(5)指针变量的值是可以改变的 
*		指针变量的值可以改变 
*			char *a="I love China!";
*			a=a+7;
*			printf("%s",a);//输出:China! 	
*	
*		数组名虽然代表地址,但它是常量,它的值是不能改变的 
*			char str[]={"I love China!"}; 
*			str=str+7;//[Error]incompatible types in assignment of 'char*'to 'char[14]'
*			printf("%s",str);
*/
	


C语言之字符指针 第一种:指向一个字符 第二种:指向一个数组 第三种:指向一个字符常量 对于char*ch="hello,world"这行代码,很多小伙伴会认为是把hello,world放到字符指针ch里面,但其实是把字符串hello,world,首字符的地址放到了ch中. ...... 阅读详情

相关推荐

C语言中使用字符指针变量和字符数组的比较

前言:以下话语都是经过自己着重审核的,以最大效力确保没有错别字,以及其他细节的问题,确保不引起读者混乱!读者可以放心的阅读! 使用字符指针变量和字符数组的比较 (1)字符数组有若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),绝不是将字符串放到字符指针变量中。 (2)赋值方式:可以对字符指针变量进行赋值,但不能对数组名进行赋值。 Char *a; //a为字符指针变量 a=”I love china!” //将字符串首元素地址赋给指针变量,但赋给a的不

十三阿哥的博客 1856

字符指针

2019-8-9字符指针 ①字符指针:指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间,并有唯一确定的首地址。即将字符串的首地址赋值给字符指针,可让字符指针指向一个字符串。 ② char *ptr = "Hello";//将保存在常量存储区的"Hello"的首地址赋值给ptr 与 char *ptr; ptr = "Hello";//是等价的,注意不能理解为将字符串赋值给ptr...

小菜鸡 3万+

PCB Layout总结

PCB Layout作为硬件设计中的一个环节,也是很重要的一个环节;在硬件电路设计合理的情况下,他其实是影响性能的一个绝对重要的指标。现在很多的PCB Layout工程师都是按照硬件工程师或者PI SI工程师给出的约束规则来完成布局布线的,这些也就是俗称的 “拉线工”。他们重复而机械的完成一块块PCB设计,一段时间设计后,他们中的一些或许已经有了这样的一些经验:哪些要做等长,哪些要走粗、哪些要平...

xydlxd118的博客 2581

字符串--字符指针、字符串的访问和输入/输出(字符串空格问题,输入带双引号的字符串)

其实,在前面几个程序都存在一种容易被忽略的问题,即如果用户没有听从括号内的提示信息的指示,键入的字符数超过了数组name的大小12,那么多出来的那些字符就有可能重写内存的其他区域,导致程序出错。例如,在前面定义的字符数组str中,str[0]就表示第1个字符’H’,str[1]表示第2个字符’e’,依此类推,可以通过下标为i的元素str[i]来访问存放于数组中的第i+1个字符。因为数组名是一个地址常量,所以str的值是不可修改的,但ptr的值(即ptr的指向)可以被修改,ptr所指向的字符串也可以被修改。

ww1425408527的博客 7272

深入解析组合逻辑环(combinational loop)的成因与解决方案

本文深入解析了数字电路设计中组合逻辑环(combinational loop)的成因与危害。通过边沿检测和中断轮询(round_robin)仲裁器等实例,揭示了代码如何意外形成环路,并对比了插入触发器、重构逻辑以及状态机思维三种核心解决方案,帮助硬件工程师从根本上避免这一常见设计陷阱,确保电路稳定可靠。

weixin_28278377的博客 313

Exposure Fusion

MertensTMO原理详解: 文章:2007年Exposure Fusion 论文链接:http://ntp-0.cs.ucl.ac.uk/staff/j.kautz/publications/exposure_fusion.pdf 论文代码:C版本:https://github.com/JawThrow/ExposureFusion python版本:https://github.com/lzocro/Exposure-Fusion matlab版本:https://github.com/Mericam

大长腿不解释 1652

C语言 #字符指针

以例子为导向来分析字符指针的中存的是什么,以及常量字符串在内存中是如何存储的。1、字符指针就是指针变量指向的对象是字符类型,即指针变量的类型为 char*;2、指针p中存放的是常量字符串在常量区存放的首字符 'a' 的地址3、常量字符串存放在内存中的常量区,常量区中的数据只能读取而不能被修改。

Distinguished_z的博客 3149

从零到一:ESP32-P4 PPA加速的配置陷阱与避坑指南

本文详细解析ESP32-P4结合LVGL的PPA硬件加速配置中的常见陷阱,包括内存对齐、缓冲区设置和同步机制等关键问题。提供实用的避坑指南和优化方案,帮助开发者高效启用esp32p4的PPA加速功能,显著提升图形渲染性能。

sky77的博客 395

对使用字符指针变量和字符数组的讨论

区别:1、字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址)。 2、赋值方式。对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值:char str[20]; str="I love China";而对字符指针变量,可以用如下方法赋值:char *a; a="I love China ";注意,赋值给a的不是字符,而是字符串的第...

qq_44137560的博客 278

AI Agent ReAct架构设计模型剖析

ReAct通过"思考-行动-观察"循环运作:智能体先进行自然语言推理,再调用外部工具执行行动,观察结果后继续推理直至解决问题。这种架构提高了透明度和准确性,减少幻觉风险,使LLM能主动分解任务并利用外部数据源。实现关键在于精心设计的提示模板,引导LLM按结构化格式响应,而非依赖模型固有能力。

weixin_43939320的博客 1249

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构

本文记录的是基于RepVit的YOLOv11轻量化改进方法研究。RepVit的网络结构借鉴ViT的设计理念,通过分离的token mixe和减少推理时的计算和内存成本,同时减少扩展比率并增加宽度,降低延迟,并通过来弥补参数大幅减少的问题,提高了准确性。本文在替换骨干网络中配置了原论文中的和五种模型,以满足不同的需求。

Limiiiing的博客 2973

C语言指针学习——对使用字符指针变量和字符数组的讨论

虽然使用字符数组和字符指针变量都能实现字符串的存储和运算,但二者还是有区别的,不能混为一谈。 主要概括有以下几点: 1.字符数组由若干个元素构成,每个元素中存放一个字符,而指针变量存放的是字符串第一个字符的地址,而不是将字符串存放到指针变量中。 2.赋值方式。对字符数组只能对各个元素进行赋值,而不能采用一下办法进行赋值。 char str[20]; str ="hello world";

nienelong3319的博客 591

5G无人机安全研究综述

国内多所高校提出混合信任模型,南京航空航天大学于2020年提出了起源信息感知的无人机网络信任模型[26],模型基于报文的完整性对报文创建和操作节点的行为评判并生成观测证据,收集证据进行信任评估,识别网络中的恶意节点并进行路由隔离,实现准确的对等信任评估。同时,5G技术的高速率、高可靠性、低时延等特点,能够为无人机提供实时高清图像回传,保证通信网络的稳定,拓展无人机飞控距离限制,丰富了5G无人机的应用场景。5G和无人机技术的融合,丰富了传统无人机的应用服务场景,然而5G无人机仍存在安全隐患。

weixin_70923796的博客 765

C语言编程 对字符数组和字符指针变量的讨论

用 字符指针变量  定义一串字符 方法一 #include<stdio.h> int main() {     char *a = " love ";  // 定义一个字符指针变量 //     printf("%s",a);          return 0 ; } 用 字符指针变量  定义一串字符 方法二 #include<stdio.h> int main...

莫比乌斯环的博客 197

OpenClaw 超级 AI 实战专栏【实战案例】(五)邮件收发 + 日历日程 + 文件管理一站式搞定

OpenClaw 实现办公自动化核心是模块解耦:邮件收发、文件管理、日历日程各自封装,便于维护和扩展;开发中需重点解决编码兼容、权限配置、时间格式、重复处理四大类坑点,核心思路是 “提前校验 + 异常兜底 + 统一格式”;敏感信息(邮箱密码、API Token)务必通过.env管理,避免硬编码泄露。

qq_36130719的博客 740

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

指针系统学习5-对使用字符指针变量和字符数组的讨论

虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈……主要概括起来有以下几点:1. 字符数组由若干个元素组成,每个元素中 放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。 2. 赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。 char str[20]; s...

weixin_30344795的博客 162

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

通过指针引用字符串(二)字符指针作函数参数(三)字符指针变量和字符数组的比较

如果想把一个字符串从一个函数”传递“到另一个函数,可以用地址传递的方法,即用字符数组名作参数,也可以用字符指针变量作参数。a的值是不可预料的,可能指向内存中空白的(未用的)用户存储区中(好的情况),也可能指向已存放指令或数据的有用内存段,这会造成很大破坏。(1).字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),绝不是将字符串放到字符指针变量中。(5).指针变量的值是可以改变的,而字符数组名代表一个固定的值(数组首元素的地址),不能改变。

2301_80385605的博客 807

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

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

45. C++ 字符指针和字符串

因为定义的是一个普通指针,并没有定义空间来存放"abc",所以编译器得帮我们找地方来存放"abc",显然,把这里的"abc"当成常量并把其放到程序的常量区是编译器最合适的选择。如char s1[3]和char s2[4],s1的类型就是char[3],s2的类型就是char[4],也就是说尽管s1和s2都是字符数组,但两者的类型却是不同的。写在函数体内,那么虽然这里的"abc\0"被放在常量区中,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的, 只不过是它所指向的东西被放在常量区罢了。

谢谢大家的关注 1388

字符数组的初始化,赋值(字符串)

字符数组的初始化,赋值,字符串定义

addicted_to的博客 2300

指向字符串的指针变量与字符数组的区别(重点误区)

字符指针变量可以在定义时或赋值语句中用字符串常量对其赋值;字符数组只能在定义时用字符串常量进行赋值。

2301_81841691的博客 193

字符数组和字符指针

用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题: 1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。 2.对字符串指针方式,char *ps=”C Language”; 可以写成char *p

wangzhencu的博客 384

C语言 | 指针引用字符串

C语言字符串的引用方式 在C语言程序中,字符串是存放在字符数组中的。 用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明%s输出该字符串。 用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串常量。 通过字符数组名或字符指针变量可以输出一个字符串,而对一个数值型数组,是不能企图用数组名输出它的全部元素的。 C语言字符指针作函数参数 如果想把一个字符串从一个函数“传递”到另一函数,可以用地址传递的方法,即用字符数组名作参数,也可以用字符指针变量作参数。 在

weixin_48669767的博客 1208

C语言基础---指针数组----初始化方式&常量指针数组、指针常量数组

文章目录1. 1. #include <stdio.h> int main() { char* str[3] = { "stra","strb","strc" }; char* p = str[0]; int i = 0; while (i < 3) { printf("%s\n", p++); i++; } return 0; } stra tra ra char指针数组可以指向多个字符,直到遇到空为止。p本来指向第一个字符,但是因为是指针,所以要遇

Alien-Hu 1万+

C语言指针变量的定义和使用(一)

指针变量的定义: 基类型 *指针变量名;例如: int =2,*pa =&a;格式说明:(1)、 *是指针类型标志符。指针变量定义时必须在变量名前面加上 " * ";定义指针变量时 * 前后可以加空格也可以不加空格(2)、基类型是指针变量所指向的变量的类型。比如上面指针变量pa的基类型是int,指向int类型的变量,给它赋值也只能是int类型。(3)、定义指针变量后,可以将另一变量的地址赋给它,使之指向改变量。例如pa=&a;也可以将另一指针变量的值赋给它,例如pb=pa;

秦逸轩的博客 2627

C语言指针学习(3)

1.字符串的引用方式 在C语言程序中,字符串是存放在字符数组中的,想引用一个字符串,可以用以下俩种方法 (1)用字符数组存放一个字符串,可以通过数组名和下标引用字符串其中一个字符,也可以用数组名和格式声明“%s”输出字符串 【例题】定义一个字符数组,在其中存放字符串“I love China!”输出该字符串和第八个字符 #include<stdio.h> int main() { char string[]="I love China!"; //定义字符数

weixin_61725225的博客 2243
上一篇: malloc与直接声明变量的区别
下一篇: 数据库索引简单分析
SuilandCoder
博客等级 码龄11年 11粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值