在指针当中的类型中我们知道有一种指针类型为字符串指针 char*;
可以通过两种方法来访问一个字符或者是字符串。
1、第一种就是使用字符数组来存放字符串或者字符来实现操作。
2、下面所介绍的就是使用字符指针指向一个字符串,此时可不能定义数组。
一般的使用方法如下 👇
#include<stdio.h>int main(void){ char ch = 'w'; char *pc = &ch; *pc = 'w'; return 0;}
字符型指针方法如下 👇
运行结果🖊
hello C
如上示例 👆
定义了字符型指针变量 str,用字符串常量"hello C"为其进行赋初值。
注意🔥:这里并不是把"hello C"中的所有字符存放在 str 当中,只是把该字符串中的第一个字符'h'赋值给指针变量 str,然后printf()再通过'h'找到下一个元素直到遇到'\0'则停止。
本质上是把"hello C"这个字符串的首地址存储在了 str 当中。
如下图所示 👇
常量字符串顾名思义:就是不能被改变的字符/串。
如下示例代码 👇
上述代码所示 👆
这里的*str指针变量指向这个字符串,严格意义上来说是指向这个字符串的起始地址。
*str 是不能改变字符串当中的值的,最终程序会"挂掉"。
arr 数组是可以改变字符串当中的值。
用调试当中的监视可以证明上述例子!
代码崩溃的原因是告诉我们,当我们程序在写入对应的内存空间的时候发生了访问冲突。上述图中的报错才是真正的报错因为它是由系统来约束你的。这个字符串常量才是真正意义上的不可被修改。
💥重点核心:常量字符串是不能被改变的,在内存当中的地址也是一样不能被改变的。
一个数组的元素值为指针则是指针数组,指针数组是一组有序的指针的集合。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。
那么指针数组是怎么样的呢,如下代码所示 👇
int* arr[5];//是什么?
arr 是一个数组,有⑤个元素,每个元素是一个整形指针,是一个存放整形指针的数组。
💥注意:除了每个元素的不同,而指针数组和普通数组在其它方面其实都是一样的!
运行结果 👇
上述运行结果都是相同的。
上述代码解释 👆
arr 是一个指针数组,它包含了 3 个元素,每个元素都是一个指针,在定义 arr 的同时,我们使用变量 a、b、c 的地址对它进行了初始化,这和普通数组是多么地类似。
parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针(首元素的地址),它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。arr 第 0 个元素的类型为 int *,所以在定义 parr 时要加两个 *。
第一个 printf() 语句中,arr[i] 表示获取第 i 个元素的值,该元素是一个指针,还需要在前面增加一个 *(解引用) 才能取得它指向的数据,也即 *arr[i] 的形式
第二个 printf() 语句中,parr+i 表示第 i 个元素的地址,*(parr+i) 表示获取第 i 个元素的值(该元素是一个指针),**(parr+i) 表示获取第 i 个元素指向的数据
指针还可以与字符串相互结合进行使用,如下代码所示 👇
需要注意的是,字符数组 str 中存放的是字符串的首地址,不是字符串本身,字符串本身位于其他的内存区域,和字符数组是分开的。
也只有当指针数组中每个元素的类型都是char *时,才能像上面那样给指针数组赋值,其他类型不行。
改成下面的形式,与上面的数组是等价的,如下代码所示 👇
运行结果:C <==> CSDN <==> Electricity
接下来,演示下指针数组的应用场景,情况。
如下代码所示 👇
运行结果如下所示 👇
编辑
💥重点核心:指针数组本质上其实是个数组,数组中存放的是指针(地址) 而已😅
5.1.7 指针数组1、指针和数组的关系1:指针可以保存数组元素的地址2:可以定义一个数组,数组中有若干个相同类型指针变量,这个数组被称为指针数组 int *p[5]指针数组的概念:指针数组本身是个数组,是个指针数组,是若干个相同类型的指针变量构成的集合2、指针数组的定义方法:类型说明符 * 数组名 [元素个数];int * p[5];//定义了一个整型的指针数组 p,有 5 个元素 p[0]~p
一、字符串数组的本质与存储结构在C语言中,字符串数组是字符数组的数组,其核心特征是通过二维内存布局存储多个以\0结尾的字符串。根据实现方式可分为两类:二维字符数组char strArray[3][11] = {"Apple", "Banana", "Cherry"};每行存储一个字符串,列数需预留\0空间编译时确定大小,适合固定数量/长度的场景内存连续分配,访问效率高字符指针数组char *str
C语言进阶——指针进阶:字符指针、指针数组、数组指针。
本章写对字符指针,指针数组,数组指针的用法和练习心得,指针是个美妙的东西,令人头秃
指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
c笔记(数组指针字符串) 数组和指针 Int powers[8] = {1,2,4,6,8,16,32,64};初始化仅asic C, 常量数组:const int days[months]={31,28,31,30,31,30,31,31,30,31,30...
在C语言中,数组、指针和字符串是三个核心概念,也是学习C++的基础。2025年,掌握这些概念对于理解计算机内存管理、优化程序性
C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,字符数组用法很简单我们还是来你看个例子吧。
很多说这俩名字不是差不多嘛?那么肯定是一个意思,诶这里可不敢理解一样!数组指针or指针数组是有明显不一样的下面我们就来看看
#include <stdio.h>//字符串指针的使用int main(){ char* p = "abcdef"; printf("%c\n",*p); printf("%s\n",p); return 0;}
用指针遍历字符串中字符,上面的例子是用指针指向字符串中的首个字符,下面的例子是用指针直接指向
一、字符指针、字符数组1. 字符指针:字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。 char *ps="C Language"; 顺序是:1.分配内存给字符指针;2.分配内存给字符串;3.将字符串首地址赋值给字符指针; 可以写为: char *ps; #
最近被这几个概念搞的头晕目眩,貌似懂了,但没完全懂。想通过理解的方式去搞清楚,而不是通过记性来记住。发现了一句万能钥匙,能解决大部分跟指针相关的概念问题: 指针存储的是地址。 1、代码 #include <stdio.h> int main(int argc, char *argv[]) { pri
在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示第一种表示方式固定了每个字符串的最大大小。第二种没有字符串的大小限制。 两种数组初始化的写法形式: 1,多维数组可以通过在括号内为每行指定值来进行初始化。 int a[3][4] = { {0, 1,
如果你被这几个概念搞的头晕目眩,貌似懂了,但没完全懂。 想通过理解的方式去搞清楚,而不是通过记性来记住。 突然就发现了一句万能钥匙【基础】,能解决大部分跟指针相关的概念问题: 「指针存储的是地址」 一、代码 二、字符串常量 定义:用双引号("")括起来的0个或者多个字符组成的序列 存储:每个字符串尾 ...
c语言中利用数组、指针实现字符串、字符串数组。 1、字符串 #include <stdio.h> int main(void) { char x[] = "abcd"; //数组实现字符串 ,x一般解释为指向数组第一个元素的指针 char *y = "xyz"; //指针实现字符串 ,y为指向一个字
1 字符与字符串:char c='a'而不能写出char c="a" //字符变量用单引号'',而字符串用双引号。2 字符数组与字符指针的初始化: char s[10]={0}, *p strcpy(s,"hello word\n");或者p="hello word\n"; 而不能用s="hello word\n"y因s数组名表示数组的首地址是个常量。 字符数组的0初
你是否对C
int main(){ char *str_char[] = {"POrigin", "PModelNum", "PName", "PSN", "PDate", "PAddress", "PHWVer", "PSWVer", "PSWDate", "PSWTime", NULL};/**< 定义字符串数组, 为一个二维数组,这里的ULL为字符串数组结束标志*/ char i
组播技术(Multicast)是一种针对多点传输和多方协作应用的组通信模型,有高效的数据传输效率,是下一代Internet应用的重要支撑技术。早期的组播技术研究试图在IP层提供组播通信功能,但IP组播的实施涉及到对现有网络基础设施的调整,因此,大规模应用受到限制。随着P2P研究的兴起,基于应用层的组播技术逐渐受到广泛关注。应用层组播协议将组成员节点自组织成重叠网络(Overlay netwo
AzuraCast是一个功能强大的自托管网络电台管理套件,提供完整的电台解决方案,包括流媒体广播、节目编排、用户管理和API接口,支持多种广播格式和协议,轻松搭建专业级网络电台。 ...
DMNLP 2026 将汇集顶尖的学术科学家、研究学者和研究人员,分享和交流他们在数据挖掘与自然语言处理各方面的经验和研究成果。它还将为研究人员、从业人员和教育工作者提供一个首要的跨学科论坛,介绍和讨论数据挖掘与自然语言处理领域的最新创新、趋势、关注点、遇到的实际挑战以及采用的解决方案。被录用的文章将被收录在会议论文集,由SPIE 出版,该论文集将收录在 SPIE 数字图书馆中并被Ei Compendex 和 Scopus 检索 (该出版社EI检索非常稳定)(主题包括但不限于这些,更多详细主题请见官网)
初来乍到,请多指教!第一次写博客~记录一下日常踩的坑ECharts其实在上家公司就接触过一点,什么散点图,折线图,柱状图等等~可是上家公司有web前端呀,我只负责填充数据,我是一个废后端了没错了。最近做了一个效果就是点击柱状图表格变化,如图~踩坑的环节了o(╥﹏╥)o1.点击柱子(叠加点击事件) 我做的柱状图上头有一些筛选条件,忘记截图了。 每当筛选一次,就重新加载一次柱状
C 语言新手快速掌握的核心逻辑是:先抓核心语法(少而精),再练动手实战(高频场景),最后补底层原理(避免踩坑),全程围绕 “用代码解决实际问题” 展开,拒绝死记硬背。以下是 4 周可落地的学习方案,兼顾效率和扎实度:一、先明确:新手最该避开的 3 个坑不要一上来啃厚书(比如直接看《C Primer Plus》全篇),先挑核心语法,边学边练;