C 指针的深造
C 指针
- 1 关于内存那点事
- 2 指针的概念
- 3 指针变量的定义方法
- 4 指针的分类
- 5 指针和变量的关系
- 6 指针和数组元素之间的关系
- 7 指针数组
- 8 指针的指针
- 9 字符串和指针
- 9.1 字符串的定义
- 9.2 字符串的可修改性:
- 9.3 初始化赋值
- 9.4 使用时赋值
- 9.5 字符串和指针总结
- 10 数组指针
- 11 指针和函数的关系
- 12 经常容易混淆的指针概念
- 13 特殊指针
1 关于内存那点事
2 指针的概念
3 指针变量的定义方法
4 指针的分类
5 指针和变量的关系
6 指针和数组元素之间的关系
7 指针数组
8 指针的指针
9 字符串和指针
9.1 字符串的定义
字符串就是以 \0
结尾的若干的字符的集合。
字符串的地址,是第一个字符的地址。如:字符串 "I Love You !"
的地址,即字符串中字符 'I'
的地址。
- 字符串存放在
数组
中;即在内存(栈、静态全局区)中开辟了一段空间存放字符串。
定义了一个字符数组str,用来存放多个字符,并用"I love C!"给 str 数组初始化,
字符串 "I love C!" 存放在 str 中。
char str[100] = "I love C!";
注:
普通全局数组:内存分配在静态全局区。
普通局部数组:内存分配在栈区。
静态数组(静态全局数组、静态局部数组):内存分配在静态全局区。
- 字符串存放在
文字常量区
;在文字常量区开辟了一段空间存放字符串,将字符串首地址赋值给指针变量。
定义了一个字符指针变量 str,只能存放字符地址编号。
char *str = "I love C !";"I love C !" 这个字符串中的字符不是存放在 str 指针变量中。
str 只是存放了字符 'I' 的地址编号,"I love C !" 存放在文字常量区。
- 字符串存放在
堆区
;使用 malloc 等函数在堆区申请空间,将字符串拷贝到堆区。
动态申请了 10 个字节的存储空间,首地址给 str 赋值。
char* str = (char*) malloc(10);将字符串"I LOVE YOU !"拷贝到 str 指向的内存里。
strcpy(str, "I LOVE YOU !");
9.2 字符串的可修改性:
字符串内容是否可以修改,取决于字符串存放在哪里。
- 存放在数组中的字符串的内容可修改
char str[100] = "I love C !";
str[0] = 'x'; //正确可以修改的。
注:数组没有用 const 修饰。
- 文字常量区里的内容是不可修改的
char *str = "I love C !";
printf("str = %s\n", str);//"I love C !"
printf("str = %s\n", str+2);//"love C !"错误!'I' 存放在文字常量区,不可修改。
*str = 'x'; //这么二次赋值 是错误的哦!!!错误!编译无错,但是赋值结果会导致数据错乱,因为没有正确的结束符!(赋值字符串地址是可以的哦)
char a = 'a';
str = &a;
注:
1、str 指向文字常量区的时候,它指向的内存的内容不可被修改。
2、str 是指针变量可以指向别的地方,即可以给str 重新赋值,让它指向别的地方。
- 堆区的内容是可以修改的
char *str = (char*)malloc(10);
strcpy(str, "I love C");
*str = 'y; //正确,可以,因为堆区内容是可修改的
注:
1、str 指向堆区的时候,str 指向的内存内容是可以被修改的。
2、str 是指针变量,也可以指向别的地方。即可以给str 重新赋值,让它指向别的地方
注意:
str 指针指向的内存能不能被修改,要看 str 指向哪里。
str 指向文字常量区的时候,内存里的内容不可修改
str 指向数组(非const 修饰)、堆区的时候,它指向内存的内容是可以修改
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <malloc.h>int main(int argc, char* argv[])
{char* str = (char*)malloc(sizeof(char)*32);if(str){strcpy(str, "I love C");strcpy_s(str, 32, "I love C");}printf("--str = %s--\n", str); //--str = I love C--if (str) {*str = 'y'; //正确,可以,因为堆区内容是可修改的}printf("--str = %s--\n", str); //--str = y love C--return 0;
}
9.3 初始化赋值
1.字符数组初始化:
char buf_aver[20] = "hello world";
2.指针指向文字常量区,初始化:
char *buf_point = "hello world";
3、指针指向堆区,堆区存放字符串。
不能初始化,只能先给指针赋值,让指针指向堆区,再使用strcpy、scanf 等方法把字符串拷贝到堆区。
char *buf_heap;
buf_heap = (char *)malloc(15);
strcpy(buf_heap, "hello world");
scanf("%s", buf_heap);
9.4 使用时赋值
- 字符数组:使用scanf 或者strcpy
char buf[20] = "hello world";
buf = "hello kitty"; 错误,因为字符数组的名字是个常量,不能用等号给常量赋值。
strcpy(buf, "hello kitty"); 正确,数组中的内容是可以修改的
scanf("%s", buf); 正确,数组中的内容是可以修改的
- 指针指向文字常量区
char *buf_point = “hello world”;
1) buf_point = "hello kitty"; 正确,buf_point 指向另一个字符串
2) strcpy(buf_point, "hello kitty"); 错误,这种情况,buf_point 指向的是文字常量区,内容只读。
当指针指向文字常量区的时候,不能通过指针修改文字常量区的内容。
- 指针指向堆区,堆区存放字符串
char *buf_heap;
buf_heap = (char *)malloc(15);
strcpy(buf_heap, "hello world");
scanf("%s", buf_heap);
9.5 字符串和指针总结
1
、指针可以指向 文字常量区。
1)指针指向的文字常量区的内容不可以修改
2)指针的指向可以改变,即可以给指针变量重新赋值,指针变量指向别的地方。
2
、指针可以指向 堆区。
1)指针指向的堆区的内容可以修改。
2)指针的指向可以改变,即可以给指针变量重新赋值,指针变量指向别的地方。
3
、指针也可以指向 数组(非const 修饰)
char buf[20] = "hello world";
char *str = buf;
这种情况下
1)可以修改buf 数组的内容。
2)可以通过str 修改str 指向的内存的内容,即数组buf 的内容。
3)不能给buf 赋值 buf = “hello kitty”; 错误的。
4)可以给str 赋值,及str 指向别处。str = “hello kitty”;
10 数组指针
11 指针和函数的关系
12 经常容易混淆的指针概念
13 特殊指针
相关文章:
C 指针的深造
C 指针1 关于内存那点事2 指针的概念3 指针变量的定义方法4 指针的分类5 指针和变量的关系6 指针和数组元素之间的关系7 指针数组8 指针的指针9 字符串和指针9.1 字符串的定义9.2 字符串的可修改性:9.3 初始化赋值9.4 使用时赋值9.5 字符串和指针总结10 数组指针11 …...
大数据之-Nifi-应用场景2-2_设置putfile处理器自动创建目标文件夹_以及存在重复文件时自动覆盖---大数据之Nifi工作笔记0006
上一节我们留了两个问题,一个是,如果我们没有创建putfile要写入的目标文件夹,会报错吗? 可以看到我们putfile目标文件夹是上面这个目录 我们来试一试,如果目标文件夹不存在,putfile处理器会自动创建吗 首先我们删除这个target目标文件夹 然后我们进入cd source目录,源文件夹目…...
buuctf Web 下
9.[ACTF2020 新生赛]Exec 访问url: http://cc3c6c27-e2df-4665-baba-1d9a32dc963e.node3.buuoj.cn/ 首页如下: 直接ping ip可以得到结果 常见管道符 1、|(就是按位或),直接执行|后面的语句 127.0.0.1 | cat /flag…...
【项目精选】javaEE土地档案管理系统(源码+论文+视频)
技术:java、jsp、struts、spring、hibernate 数据库:oracle 集成开发工具:eclipse 点击下载源码 本土地项目管理系统在可行性研究的基础上,是为了进一步明确土地项目管理系统的软件需求,以便安排项目规划和进度&#x…...
JVM那些事——垃圾回收和内存分配
内存分配 默认情况下新生代和老年区的内存比例是1:2,新生代中Eden区和Survivor区的比例是8:1。 对象优先分配在Eden区。大对象直接进入老年区。通过-XX:PertenureizeThreshold参数设置临界值。长期存活的对象进入老年区。对象每熬过一次Minor GC,年龄1&…...
什么牌的运动耳机比较好、运动耳机排行榜10强
现在运动健身的潮流持续不下,而且人们长期坐于办公室办公,严重影响身体的健康,这时不论是去健身房锻炼,还是户外跑步都是非常必要的了,而蓝牙耳机作为运动必备的一款数码产品,更是受到了大家的青睐…...
华为OD机试题 - N 进制减法(JavaScript)
最近更新的博客 2023新华为OD机试题 - 斗地主(JavaScript)2023新华为OD机试题 - 箱子之形摆放(JavaScript)2023新华为OD机试题 - 考古学家(JavaScript)2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)2023新华为OD机试题 - 最多等和不相交连续子序列(JavaScri…...
MyBatis 之三(查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection)
文章目录1. 参数占位符 #{} 和 ${} 的区别2. ${} 的优点3. SQL 注入问题4. like 查询5. 返回字典映射:resultMap6. 一对一查询:association7. 一对多查询:collection回顾一下,在上一篇 MyBatis 之二(增、删、改操作&am…...
【云原生之Docker实战】使用Docker部署Web在线聊天室Rocket.Chat
【云原生之Docker实战】使用Docker部署Web在线聊天室Rocket.Chat 一、Rocket.Chat介绍二、检查本地系统环境1.检查系统版本2.检查docker版本3.检查docker状态4.检查docker compose版本三、下载Rocket.Chat镜像四、部署Rocket.Chat1.创建部署目录2.编辑docker-compose.yaml文件3…...
阿里一面:谈一下你对DDD的理解?2W字,帮你实现DDD自由
说在前面 在微服务的应用开发中,DDD 用得越来越普及。 在40岁老架构师 尼恩的读者交流群(50)中,DDD是一个非常、非常高频的交流话题。 最近,有小伙伴面试阿里时,遇到一个面试题: 谈谈你对DDD的理解? 小伙…...
嵌入式Linux入门级板卡的神经网络框架ncnn移植与测试-米尔i.MX6UL开发板
本篇测评由电子发烧友的优秀测评者“ALSET”提供。 米尔 MYD-Y6ULX-V2 开发板,基于 NXP i.MX6UL/i.MX6UL L处理器,该开发板被米尔称之为经典王牌产品。本次测试目标是在此开发板上进行神经网络框架ncnn的移植与测试开发,测试ncnn在此开发板上…...
扬帆优配|杠杆资金重仓股曝光,3只科创板股获多路资金青睐
到2月16日,科创板融资余额环比前一日削减1104.16万元,其间,23股融资余额环比添加超千万元,融资净买入居前的有晶科动力、诺诚健华、爱博医疗等。 到2月16日,市场融资余额算计1.48万亿元,较前一交易日削减27…...
资讯汇总230217
230217 22:48 【美联储理事鲍曼:美国通胀仍旧太高】美联储理事鲍曼表示,美国通胀仍旧太高;美国当前的经济数据不一致,不同寻常的低失业率是一个好迹象;让通胀回到目标还有很长的路要走;需要继续加息&#x…...
前置知识- 初值问题、ode 系列函数的用法、刚性 (stiff) 方程简介、高阶微分方程的降阶
1.1.4 龙格一库塔法 将向前欧拉法写成式 (1-37) 的形式, 可以看出它实际上利用了 f ( x , u ) f(x, u) f(x,u) 在 x n...
# AutoSar一文概览
1.什么是AutoSar AUTOSAR全称为“AUTomotive Open System ARchitecture”,译为“汽车开放系统体系结构”;AUTOSAR是由 全球各大汽车整车厂、汽车零部件供应商、汽车电子软件系统公司联合建立的一套标准协议、软件架构。 2.为什么汽车行业要定义一个…...
分享88个HTML旅游交通模板,总有一款适合您
88个HTML旅游交通模板下载链接:https://pan.baidu.com/s/1pziNhgpC53h3KZy_a-aAFQ?pwdf99e 提取码:f99e Python采集代码下载链接:采集代码.zip - 蓝奏云 HTML5旅行公司旅行社网站模板 HTML5旅行公司旅行社网站模板是一款提供旅行服务的公司…...
C#中GDI+的矩形功能扩展
文章目录一、中心定位绘制图形1、矩形及椭圆中心定位2、圆的中心定位矩形二、圆角矩形三、收缩功能四、移动复制功能原文出处: https://haigear.blog.csdn.net/article/details/129060020GDI发展到GDI绘制函数中的参数往往都有矩形这个参数(除绘制直线和…...
数字经济活动题
讨论活动1-1:数字化 经济数字化(数据数字化,高速通信,大容量存储)将如何影响您所居住的国家?在网上搜索新闻文章(两三篇就够了),并讨论数字化如何影响经济、公共部…...
html 的相对路径和绝对路径
整篇文章是以 src 标签进行演示。 文章目录 一、相对路径 1、同级目录查找 2、上一级目录查找 3、下一级目录查找 二、绝对路径 一、相对路径 👵相对路径:从当前目录开始查找。 1、同级目录查找 写法: 1.1.直接写文件名字;…...
selenium进行QQ空间登录
一、selenium简要说明 selenium是基于浏览器自动化的一个模块,它能便捷的获取网站中动态加载的数据,和实现模拟登录、爬虫等操作 二、实现流程 2.1 selenium前置操作 1. 安装selenium模块 pip3 install selenium 2. 下载浏览器内核程序 注意࿱…...
SpringCloud(二)负载均衡服务调用Ribbon、服务接口调用OpenFeign案例详解
五、负载均衡服务调用Ribbon 技术版本Spring Cloud版本Hoxton.SR1Spring Boot版本2.2.2RELEASECloud Alibaba版本2.1.0.RELEASE Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主…...
大数据第一轮复习笔记(2)
Spark ./spark-submit --class com.kgc.myspark01.WordCount --master yarn --deploy-mode cluster /opt/myspark01-1.0-SNAPSHOT.jar 1.Client向YARN的ResourceManager申请启动Application Master。Client中创建SparkContext同时初始化中将创建DAGScheduler和TASKScheduler…...
LeetCode 2108. 找出数组中的第一个回文字符串
给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串,返回一个 空字符串 “” 。 回文字符串 的定义为:如果一个字符串正着读和反着读一样,那么该字符串就是一个 回文字符串 。 示例 …...
第63章 SQL 快速参考教程
第63章 SQL 快速参考教程 SQL 语句语法AND / ORSELECT column_name(s) FROM table_name WHERE condition AND|OR conditionALTER TABLEALTER TABLE table_name ADD column_name datatypeor ALTER TABLE table_name DROP COLUMN column_name AS (alias)SELECT column_name AS …...
机器学习笔记
一 1.类型 有监督:分类、回归 无监督:聚类、降维 2.挑战: 过拟合:泛化能力弱 欠拟合:模型过于简单 二、 1.开发流程 数据收集->数据清洗->特征工程->数据建模 2.选择性能指标: 回归问题 均方根…...
L1-072 刮刮彩票
“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示: 每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个位置上…...
互联网摸鱼日报(2023-02-18)
互联网摸鱼日报(2023-02-18) InfoQ 热门话题 从用云焦虑到“深度云化”,新云原生时代带给我们哪些思考? 数据治理之需求层次 GitHub 更新 Copilot 以阻止不安全代码,并称其支持了超 60% 的 Java 开发者 数据库隔离…...
Spring 中经典的 9 种设计模式
1.简单工厂(非23种设计模式中的一种) 2.工厂方法 3.单例模式 4.适配器模式 5.装饰器模式 6.代理模式 7.观察者模式 8.策略模式 9.模版方法模式 Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实现方式: BeanFactory。Spring中的BeanFa…...
CentOS7突然没法上网【Network 中wired 图标消失】
参考文章(七种办法):CentOS 7 右上角网络连接图标消失,设置网络有线消失解决办法 正常图标消失,先在 终端命令 依次执行以下命令 service NetworkManager stop service network restart service NetworkManager start 一、问题真烦 CentOS7图形化界面安装…...
织梦网站地图/seo优化的方法
SpringBoot提供了/actuator/health健康检查的接口,接着我们从前往后看这个请求是怎么被SpringBoot处理的,当然入口还是DispatcherServlet。 第一个迭代的是 org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping 它继承…...
淮安做网站的公司有哪些公司/360开户
文|柯鸣 来源|智能相对论(aixdlun) 试想一下,一个静谧的午夜,你和家人正在熟睡,家中突然响起毛骨悚然的笑声,时远时近,这困扰了大人,惊吓了孩子。而这一切的怪笑,都是由…...
国内精美网站欣赏/上海网络seo公司
一、安装准备:在一个或多个主机上安装vertica,可使用命令行,也可以使用管理控制台。 必须是root用户或者sudo 访问权限。 四种安装方式本地localhost模式,不能扩展成集群;物理集群模式,最普遍的部署方式&am…...
阿甘网站建设/广告投放公司
git传送门 转载于:https://www.cnblogs.com/syaoyao/p/5463924.html...
椒江做国际网站的公司/数据营销
在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。 请你重新排列这些条形码,使其中两个相邻的条形码 不能 相等。 你可以返回任何满足该要求的答案,此题保证存在答案。 示例 1: 输入:[1,1,1,…...
福州做网站建设服务商/互联网营销师证书怎么考多少钱
大数据预计市场将在2020美元之间达到2030亿美元,迄今取得的进展与预测完全同步。虽然现在的企业正努力在这些高度竞争的环境中巩固自己的地位,但新兴技术最终赢得了他们应有的利益,并且正在逐渐地发挥自己的潜力。营销一直是一个灵活的领域&a…...