字符数组和字符指针

Python爬虫实战:全自动采集银行理财产品收益率数据 本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助! 阅读详情

1.字符数组是由若干个数组元素组成的,每个元素占用一个存储单元,保存一个字符。

   例子: char s[50];   定义了一个字符数组,编译器将会分配50个连续的存储单元。

2.字符串指针变量本身是一个变量,用来保存字符串常量(指向的内容可能是常量)的首地址。如果字符串指针变量没      初始化而使用,将产生不可预料的后果。

   例子: char *ps; 定义字符串指针变量,编译器只分配4个字节,用来存放字符串常量的首地址,由于指针变量   的      值还未初始化,所以ps变量中的值还是未知的。必须先对字符串指针变量进行初始化,使其指向一个确定的内存        区域,然后才能使用。


1. 数组名s是数组的首地址,是一个指针常量,确定存储位置后就不能改变。

    数组定义后,要改变字符数组的内容,就只能逐个修改数组元素的值,例如,可以按以下方式对数组各元素分别赋值:

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

2. 字符串指针变量是一个变量,s是一个变量,可以改变s使它指向不同的字符串,但不能改变str所指的字符串常量。

  1. char *s;  
  2. s="The Beijing 2008 Olympic Games";  
  3. s=" One Word, One Dream!"; 


1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写
  "abc",那么编译器帮你存储的是"abc\0"

2."abc"是常量吗?答案是有时是,有时不是。

 不是常量的情况:"abc"作为字符数组初始值的时候就不是,如
                  char str[] = "abc";
    因为定义的是一个字符数组,所以就相当于定义了一些空间来存放"abc",而又因为
    字符数组就是把字符一个一个地存放的,所以编译器把这个语句解析为
    char str[3] = {'a','b','c'};
                  又根据上面的总结1,所以char str[] = "abc";的最终结果是
    char str[4] = {'a','b','c','\0'};
    做一下扩展,如果char str[] = "abc";是在函数内部写的话,那么这里
    的"abc\0"因为不是常量,所以应该被放在栈上。
  
  是常量的情况:  把"abc"赋给一个字符指针变量时,如
                  char* ptr = "abc";
    因为定义的是一个普通指针,并没有定义空间来存放"abc",所以编译器得帮我们
    找地方来放"abc",显然,把这里的"abc"当成常量并把它放到程序的常量区是编译器
    最合适的选择。所以尽管ptr的类型不是const char*,并且ptr[0] = 'x'能编译
    通过,但是执行ptr[0] = 'x'就会发生运行时异常,
因为这个语句试图去修改程序
    常量区中的东西。
    记得哪本书中曾经说过char* ptr = "abc";这种写法原来在c++标准中是不允许的,
    但是因为这种写法在c中实在是太多了,为了兼容c,不允许也得允许。虽然允许,
    但是建议的写法应该是const char* ptr = "abc";这样如果后面写ptr[0] = 'x'的
    话编译器就不会让它编译通过,也就避免了上面说的运行时异常。
    又扩展一下,如果char* ptr = "abc";写在函数体内,那么虽然这里的"abc\0"被
    放在常量区中,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的,
    只不过是它所指向的东西abc\0被放在常量区罢了。

3.数组的类型是由该数组所存放的东西的类型以及数组本身的大小决定的。
  如char s1[3]和char s2[4],s1的类型就是char[3],s2的类型就是char[4],
  也就是说尽管s1和s2都是字符数组,但两者的类型却是不同的。

4.字符串常量的类型可以理解为相应字符常量数组的类型,
  如"abcdef"的类型就可以看成是const char[7]

5.sizeof是用来求类型的字节数的。如int a;那么无论sizeof(int)或者是sizeof(a)都
  是等于4,因为sizeof(a)其实就是sizeof(type of a)

6.对于函数参数列表中的以数组类型书写的形式参数,编译器把其解释为普通
  的指针类型,
如对于void func(char sa[100],int ia[20],char *p)
  则sa的类型为char*,ia的类型为int*,p的类型为char*


7.根据上面的总结,来实战一下:
  对于char str[] = "abcdef";就有sizeof(str) == 7,因为str的类型是char[7],
  也有sizeof("abcdef") == 7,因为"abcdef"的类型是const char[7]。
  对于char *ptr = "abcdef";就有sizeof(ptr) == 4,因为ptr的类型是char*。
  对于char str2[10] = "abcdef";就有sizeof(str2) == 10,因为str2的类型是char[10]。
  对于void func(char sa[100],int ia[20],char *p);
  就有sizeof(sa) == sizeof(ia) == sizeof(p) == 4,
  因为sa的类型是char*,ia的类型是int*,p的类型是char*。

【异常】Claude Code CLI 模型调用异常 There‘s an issue with the selected model (claude-sonnet-4-6). It may not 摘要: Claude Code CLI v2.1.45版本存在适配缺陷,导致调用claude-sonnet-4-6模型时触发"模型不存在"的误报错误(跨Windows/Linux平台)。该问题为版本回归类异常,非模型或账户权限问题。解决方案包括:1) 校验模型名称格式为claude-sonnet-4-6;2) 降级至v2.1.34或等待官方修复;3) 检查API配置有效性;4) 通过CLI交互界面手动选择模型;5) 临时切换同系列可用模型。官方已确认该bug并将发布修复版本。 阅读详情

相关推荐

SAP PPDS启发式排产实战:从零配置到自定义规则开发(附ABAP代码示例)

本文详细介绍了SAP PPDS启发式排产的实战应用,从基础配置到自定义规则开发的全流程。通过ABAP代码示例,展示了如何实现多目标优化、实时响应和约束可视化,帮助企业提升订单交付率、减少设备闲置时间。文章还包含开发环境准备、标准模板解析、自定义开发步骤及性能优化技巧,适合制造业数字化转型的实践参考。

seed的博客 184

数组的基础知识

数组 文章目录数组1.数组的定义2.访问数组中的元素3.遍历打印数组中的元素4.数组的初始化5.那么现在我们来做一些小练习吧! 这篇文章主要对数组、二维数组和几个字符串处理函数进行简单探究 1.数组的定义 类型 数组名[元素个数] 这种写法即为数组的定义方式 如: int a[6]; char b[20]; double c[24]; float d[30]; 上面定义的的几个类型的数组中: 一般整型数组一个元素占4个字节;字符型数组一个元素占1个字节,单精度浮点型数组占4个字节,双精度浮点型数组

qq_54198669的博客 1万+

博途WinCC多语言项目配置指南

在博途(TIA Portal)中为WinCC项目配置多语言功能,需通过系统化步骤实现界面文本的动态切换。

dhaimo的博客 2473

字符数组与字符指针

转自:http://blog.youkuaiyun.com/qiumm/article/details/5657120 1.字符指针可以指向一个字符串。 我们可以用字符串常量对字符指针进行初始化。例如,有说明语句: char *str = "This is a string."; 是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。 这里要注意字符指针与字符数

如丧 1301

《C语言小游戏之贪吃蛇程序代码》

//为广大编程游戏爱好者提供一个参考的游戏源代码#include<stdio.h>#include<conio.h>#include<windows.h>#include<time.h>#define framex 5#define framey 5#define wide 20#define high 20int i,j,a[2];//将光标移动到...

qq_42052821的博客 2万+

【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!1

你是否错过了周杰伦的票,最近又没抢到五月天的票,不要太难过,今晚有张学友的票,后天还有张杰的票,加油哦!

weixin_45841831的博客 6万+

十、指针

* :取值操作符&:取址操作符一、指针与指针变量的区别:指针变量的值(即指针变量中存放的值)是地址(即指针)二、定义指针变量时要注意必须指定基类型三、如果 pointer_1 = &a       则&*pointer_1 = &a(因为*和&优先级相同,自右向左结合)      *&a 和 *pointer_1也是相同的       即 *&amp...

m346764966的博客 253

嵌入式面经(2)——央企篇

前文得知我只投央企,不投国企,有面试的央企大致有三类:感兴趣的同学可以和我私聊军工央企相关(航空航天,兵器兵工)制造央企相关(三桶油,装备制造)金融运维相关(信通集团,国有银行)接下来我将对我有的面试中询问的面经进行总结。

coldmood77的博客 473

字符指针和字符数组

字符指针和字符数组

wfy17030212的博客 1424

国科大学习资料--机器人智能控制_袁如意老师PPT后习题答案(学长精心整理)

人工神经元激活函数的作用是什么? 答:激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。 人工神经网络的学习规则有哪些?各有何特征? 答:大类可以分为无监督学习算法、有监督学习算法和强化学习。其中无监督学习算法指只有输入信息,没有期望的输出信息,如Hebb学习规则,神经元连接强度的变化与两个相互连接的神经元的激活水平成正比。竞争学习法则:网络各输出单元相互竞争,最后达到只有一个最强者激活。有监督学习算法指同时提供输入信息和对应的期望输出信息,如误差学习(Delta学

无名何许人的博客 1488

【人工智能】Cursor模型被封?两步教你破解

Cursor模型全线被禁,主流模型如Claude、GPT-4无法访问,仅剩Deepseek等基础模型可用。官方证实限制源于上游API区域政策,提供三种"无效"解决方案引发用户不满。社区发现有效解决方式:需同时开启全局代理和将Cursor网络设置改为HTTP/1.1协议,详细步骤包括修改用户设置和完全重启程序。另有SOCKS5代理配置方案供高级用户选择。技术原理推测HTTP/1.1可绕过区域检测。用户面临继续使用或转投其他工具的选择,社区交流受限但仍有讨论。

奶爸的编程之路,也就一周冷个三天 2201

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

C语言字符指针变量和字符指针的区别

qq_46542684的博客 1162

【目标检测】IoU(交并比)详解及代码实现

1. IOU概述        IoU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率-,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。 2. IoU计算        IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实

Roaddd的博客 2万+

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

字符指针和字符数组的初始化

字符指针和字符数组的初始化 例如: char *p=“hello”;和char c[10]="hello"有什么区别呢? 字符串常量存储在数据区中的常量区,好处是相同的字符串,比如hello只会存储一遍,常量区的含义就是字符串本身是不可修改的,所以我们称之为字符串常量,hello存在字符串常量区,占用6个字节,有自己的首地址。 char *p="hello"是将字符串常量"hello"的首地址赋值...

ADbyCool的博客 2484

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

特性字符数组 (e.g.,char str[]字符指针 (e.g.,char *ptr本质连续的内存块,存储字符本身变量,存储一个内存地址内存分配编译时静态分配 (栈或全局区)指针变量本身在栈上,指向的内存可动态分配内存所有权拥有自己的存储空间指向的内存可能属于数组、字面量或堆sizeof 结果数组总字节数 (包括'\0'指针变量的大小 (通常4或8字节)内容可变性✅ 元素可修改⚠️ 取决于指向的内存 (字面量不可改)地址可变性❌ 数组名是常量地址 (不可重新赋值)✅ 指针可指向不同地址初始化。

andy0ma的博客 552

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

字符指针;字符数组;指针数组和数组指针(指针进阶)

/ 1. 指向单个字符// p1 指向字符变量 ch 的地址// 2. 指向字符串常量(最常用)// p2 指向字符串常量 "Hello" 的首字符 'H' 的地址// 3. 指向字符数组(数组名本身是首地址)// p3 指向字符数组 arr 的首元素 'W'// 打印验证// 输出:*p1 = A(解引用取单个字符)// 输出:p2 = Hello(字符串打印,从首地址到 '\0' 结束)// 输出:p3 = Worldreturn 0;这里有个要注意的是。

2501_93087704的博客 1679

关于字符数组和字符指针

关于字符数组和字符指针关于字符数组和字符指针为什么可以这样赋值?存储区域 关于字符数组和字符指针 之前有同学问了关于这方面的问题,上网查了查发现这还真是个有很多人都在总结的问题,看了里面的很多文章,自行进行了一个总结,感兴趣的同学看一看,如有错误还望指正。 为什么可以这样赋值? 我们来回顾一下那个题目: 已知char *str, **s=&str; 正确的语句是______________。 正确选项是:*s="computer"; 而我选择了这个:**s="computer"; (相信大多数同学都

B20040609的博客 211

C/C++中字符指针和字符数组、字符指针数组及指向指针的指针的含义

字符指针和字符数组char* s1="hello"; char  s2[]="world";两个表达式的含义是一样的.如果讲不同之处的话,VC6中编译时,对这两种定义进行了不同的处理;char *s1 = "hello"; 中的"hello",编译时指针指向的区域位于PE文件的.rdata节中,是只读的.不信的话,你可以试试:main(){  char *s1="hello";  ch

yin的专栏 5316

字符数组、字符指针和字符串

一、字符数组、字符串和‘\0’的关系

J_Jeff的专栏 636

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

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

weixin_41860749的博客 3537

第八篇,字符数组和字符指针详细讲解。

字符数组和字符指针

weixin_44651073的博客 2806

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

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

C语言的字符串有两中表现形式: char *ch="hello world"; char ch[]="hello world"; 这两种形式都能实现字符串的存储,但有区别: 1、复制的不同 对于字符数组,我们可以对某个字符进行赋值: char ch[4]='r'; 这将对第五个元素进行赋值,但不能以下面方式赋值: char ch[20]; ch="hello worl

天涯明月的专栏 3816

C语言的字符、字符数组和指针之间的关系

C语言的字符、字符数组和指针之间的关系变量的定义例题 变量的定义 char ch 表示定义一个字符类型变量 char* ch 表示定义一个指向字符类型的指针变量,其值为内存地址。可用于创建动态数组. char ch[N] 表示定义一个存储N个字符类型的数组变量,其中ch[0]表示数组中的第一个元素,其值为char类型。ch则表示整个数组变量,它的值是整个数组在内存中的首地址 ,ch可以看成一个存储了N个char类型的数组的指针,此时ch并不表示char类型的指针,使用sizeof(ch)后得到整个字符数组的

wchajl的博客 1335
上一篇: Eclipse CDT 中 while(cin>>s) 结束方法
下一篇: 指针加减操作,当a为数组时a和&a的区别
glx2012
博客等级 码龄14年 2粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值