指针(基础)

C++指针基础与数组指针的关联 本章介绍了C++中指针的基本概念,包括指针变量的声明、初始化、以及指针与变量之间的关系。详细讨论了指针变量的命名规则、解引用操作符的使用,以及如何通过指针访问数组元素。同时,还介绍了如何使用typedef关键字定义同义类型,以及指针与const关键字的结合使用,包括常量指针和指向常量的指针的区别。最后,探讨了指针与数组之间的紧密关系,数组名作为指针的特性,以及通过指针进行数组元素访问的示例。 阅读详情

地址和指针

  • 指针名和数组名都代表内存地址,不同的是,指针名是一个变量,而数组名是一个常量。
  • 在定义数组时,编译器必须分配及地址和足够的存储空间,以存储数组的所有元素 eg: int a[100],*p; p=a;等价于p=&a[0]; p=a+1等价于p=&a[1]其中p=a+1是合法的,a=a+1是非法的
sum=0;
for (p=a;p<=&a[99];p++)
	sum+=*p;
*(a+i)等价于a[i]
for(i=0;i<100;i++)
	sum+=*(a+i);	
for(i=0;i<100;i++)
	sum+=a[i];
for(i=0;i<100;i++)
	sum+=p[i];数组名可以用指针的形式,指针名可以用数组的形式
  • 如果p是指向某个指定类型变量的指针,该值表示在p和q之间的数组元素的个数,指针每一次加1减1,并非指针的值加1或减1,而是加上或减去该指针所指向的那个变量数据类型的长度,即他所指向的存储单元所占用的字节数。
  • 两个指向同一个数组的指针相减,表示它们之间相隔的数组元素的数目
  • 两个相同类型的指针还可以比大小,pa<pb为真
int a[10]={1,2};
int *pa,*pb;
pa=a;
pb=a+1;
cout<<pa-pb<<endl;
cout<<pb-pa<<endl;//pb-pa的值是int型的值

字符串和字符指针

字符串常量

字符串常量是用一对双引号括起来的字符序列,与基本类型常量的存储相似,字符串常量在内存中的存放位置由系统自动安排,由于字符串常量是一串字符,通常被看作一个特殊的一维字符数组,字符串常量实质上是一个指向该字符串首字符的指针常量,字符串“hello”的值是一个地址,从他指定的存储单元开始连续存放该字符串的6个字符。

char *p="Hello World!";
char ch[]="welcome to cpp!";
printf("%s","Hello World");//输出Hello World
printf("%s\n","Hello World"+1);//输出ello World
printf("%s\n",ch+1);//输出elcome to cpp!
  • 如果要改变char型数组所代表的字符串,只能改变数组元素的内容,如果熬改变指针p所代表的字符串,通常直接改变指针的值,让它指向新的字符串,p是指针变量,它的值可以改变,指向其他单元。
  • 可以对char型数组的内容通过strcpy()函数进行修改,但是不能直接赋值,因为ch是一旦声明不能更改的(数组名是常量)。
  • 可以对char型指针赋值eg:p=“hello”;
char ch[]="hello";
strcpy(ch,"hi");
cout<<ch<<endl;
p="hello";
  • 定义字符指针后,如果没有对他赋值,指针的值是不确定的,不能明确他指向的内存单元,因此,如果引用未赋值的指针,可能出现难以预料的后果。为了尽量避免引用未赋值的指针所造成的危害,在定义指针时,可先将它的初始值置为空,eg: char *s=NULL;
chat *s;
cin>>s;//这种做法是危险的
char *s,str[20];
s=str;
cin>>s;//合法

常用的字符串处理函数

  • gets() puts()字符串的输入输出 gets()函数从输入得到一个字符串,遇到回车输入结束,自动将输入和的数据和‘\0’送入数组 允许字符串带空格 puts() 输出时遇‘\0’自动将其转换为’\n’换行符
  • char* strcpy(char *s1,char *s2); 字符串复制函数
  • strcat(s1,s2)字符串连接函数,参数s1必须是字符数组基地址,参数s2可以是字符数组名or字符串常量
  • strcmp(s1,s2)字符串比较函数;若s1和s2相等,返回0;s1>s2返回一个正数;s1<s2返回一个负数
  • strlen(s1)字符串长度函数

动态内存分配

每次动态分配内存都必须检查是否分配成功

  • 了解需要多少内存空间
  • 利用动态内存分配函数来分配所需要的存储空间
  • 是指针指向获得的内存空间,以便用指针在该空间内实施运算或操作
  • 当使用完毕内存后,释放这一空间。
if((p=(int*)malloc(n*sizeof(int)))===NULL){
	printf("Not able to allocate memory.\n");
	exit(1);
}
if(p=(int*)calloc(n,sizeof(int))==NULL){
	printf("Not able to allocate memory.\n");	
	exit(1);
}
  • malloc()和calloc()的区别,malloc()对所分配的存储块不做任何事情,calloc()对整个区域进行初始化。申请成功则返回一个指向被分配存储空间的起始地址的指针,若申请不成功,则返回NULL(0)
  • free()动态存储释函数:释放由动态存储分配函数申请到的整块内存空间
  • void* realloc(void* ptr,unsigned size)分配调整函数,更改以前的存储分配
NVIDIA B300 vs B200:详细解析与性能对决 详细解析 NVIDIA B300 整机)的性能,并与前代的 B200 进行对比。它不仅在核心计算能力(FP8)上实现了飞跃,更重要的是通过革命性的第二代 Transformer Engine 和第五代 NVLink 技术,彻底重塑了大规模 AI 模型训练和推理的效率与规模上限。其显存容量和带宽的巨大提升也为处理超大型模型和数据提供了坚实基础。与 B200 相比,B300 是一次全面的、代际性的性能跃升,特别适合那些需要处理最前沿、最复杂 AI 和科学计算任务的用户和组织。 阅读详情

相关推荐

centos7下100T存储扩容(LVM)至150T

查看新增磁盘情况lsblk,fdisk -l [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 4.2G 0 rom vda 252:0 0 80G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2

tiyager的博客 1025

指针的危险

指针是一种高效率的好东西,可以设计出高效率的程序,但是指针使用不当那就是高危险,会给整个系统带来灭顶之灾。整个系统分分钟奔溃!下面是我大概总结常见的指针高危的操作,甚至可以说是非法操作! 1、指针还没有指向就直接对其进行赋值操作! 例如:int* Temp; *Temp = 10;  对于初学者一开始不怎么留意的话很容易就会犯这种致命的错误。下面可以说是一个一直以为是对的程序,是关于交换两

Touch_Dream的博客 3089

Pyrosim进阶指南:从隧道火灾模拟到复杂通风策略分析

本文深入探讨Pyrosim在隧道火灾模拟与通风策略分析中的高级应用。从精确几何建模到火源参数设置,再到通风系统的量化分析,详细介绍了如何利用Pyrosim优化隧道安全设计。特别强调了临界风速验证、横向通风配置及结果可视化技巧,为工程师提供实用的进阶指南。

weixin_30644369的博客 140

从编译器角度分析C语言中数组名和指针的区别

数组名和指针是两个往往很容易让人们混淆的概念,很多人以为数组名就是一个指针,也有很多人知道数组名不同于指针但是仅知道数组名的值不能像指针一样改变,例如你可以写出下面这样的代码:int*p; p++;却不能写这样的代码:int a[]; a++;那么数组名跟指针之间到底有什么区别呢?第一,在声明上,除了作为函数参数的数组名总是编译器转化成指针,其他情况下,数组名就是数组名,指针就是指针,二者不能混淆,你不能在一个文件中定义一个数组,而在另一个文件中把它声明成一个指针。char a[];//定义一个数组a

宝宝 2374

Python+OpenCV实战:雨天车牌识别准确率提升300%的5个关键技巧

本文针对雨天车牌识别准确率骤降的难题,分享了五个基于Python和OpenCV的实战技巧。通过暗通道先验去雾、雨纹抑制、光照不变量颜色空间转换、多尺度自适应阈值分割以及融合传统特征与轻量级深度学习的混合识别策略,系统性地提升了算法在恶劣天气下的鲁棒性。这些方法能有效解决图像模糊、对比度低、字符断裂粘连等问题,为智能交通等实际应用提供可靠解决方案。

k8l9m0n的博客 717

基于微信小程序的答题系统

学习视频:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!5812)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_83330193的博客 499

C——指针与数组名的区别

昨天晚上做了一套企业面试题,第一题便是“数组名与指针的区别”做了才知道自己知之甚少,学长说像这样的题纸上那点地方是不够用的,而我们能写出来的仅仅是两三行而已。所以特地在网上搜了一下。指针和数组名的共同特点是都是用来指代一个地址的。不同的是:1、指针是需要占用内存空间来存储地址的;数组名则更像是一个立即数或者常数。你可以修改指针指向的内容,但你绝对无法改变数组名的指向。2、数组和指针对于sizeof来

qq_36501535的博客 690

Kubernetes集群环境搭建与初始化

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

m0_75254642的博客 1526

指针常见的错误——指针未赋初值

# include main(){        int *p;        int i=5;        // *p // 得到p 指针变量,存放的地址,对应里边的值        printf("*p=%d\n",*p);  // 因为p没有赋初值,p里面存放的地址就是        // 一个随机的地址,               // 访问一个随机地址里面存放的数据

yangxingda188的专栏 1970

25届电信保研经验贴(空天院)

学校:中九专业:电子信息工程加权:92.89绩点:3.91/4.0rank:前五学期rank2/95,综合排名rank1(前六学期和综合排名出的晚,实际上只用到了前五学期)科研竞赛:市级大创、数模省一、数竞省二,其他校奖若干英语:六级462、四级548个人感觉:rank=科研>竞赛>英语总之rank和科研必须得有一项,要么就rank高,很多强com院校入营看rank。我rank比较有优势,因此报的多是强com院校。要么就科研经历丰富,多主动联系老师,特别是弱com院校。冬令营:空天院。

qq_68608661的博客 6363

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游是全球知名游戏开发商,以《原神》《崩坏》系列著称,专注二次元文化与AI技术创新。本文整理了10道AI产品经理面试题,涵盖Transformer架构、智能NPC设计、机器学习应用、AIGC产品规划等核心领域。题目既考察技术理解(如RAG原理、多模态模型),又关注产品落地(游戏平衡性优化、伦理安全),同时强调跨团队协作能力。参考答案均结合米哈游业务场景,体现技术驱动与玩家体验并重的产品思维,展现AI在游戏行业的创新应用前景。

ZHHHHH15的博客 683

数组名和指针的区别

近段时间在整理自己大学几年来学习C++的点点滴滴,写这篇文章源于看林锐博士的《高质量C++指南》时,看到文章直接把指针和数组名视为同一东西,原文为“数组名本身就是一个指针,是一个指针常量,即a等价于int * const a,因此你不能试图修改数组名的值”,摘自第三版127页第7.2.1小节。     自己初学C++时也被数组和指针搞得昏头转向过,通过多方求证和对比实验已把指针和数组弄得稍明白,

3万+

PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

前言 原理简介 输入参数准备 1 objectPoints特征点世界坐标 2 imagePoints特征点在摄像头下的像素点坐标 3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下的坐标 2求相机在世界坐标中的坐标 3效果求解相机在世界坐标系下的坐标点 4求解代码1.前言  很多时候,当我们利用单目相机获取图像时,往往只能获取图像中

cocoaqin的博客 5万+

指针基础总结详解

指针的基本语句一、指针是什么1.内存 2.外存和内存3.指针4.二级指针5.总结二、指针和指针类型1.指针的类型和定义方式2.指针类型的意义2.1解引用的大小权限2.2指针一次访问的范围三、野指针1.概念2.野指针成因2.1指针未初始化2.2指针访问越界2.3指针指向的空间被释放3.规避野指针四、指针运算1.指针加减整数2.指针减指针3.指针的关系运算五、指针和数组1.数组名是什么2.指针隐式转换1.1.数组名参与运算1.2.函数传参3.指针的[ ]操作 一、指针是什么 说到指针,有过基础的同学可能知道它

zhaocx111222333的博客 816

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++基础——C++ 指针

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。在这里,type 是指针的基类型,它必须是一个有效的 C++ 数据类型,var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。int * ip;/* 一个整型的指针 */ double * dp;/* 一个 double 型的指针 */ float * fp;

wtlll的博客 3675

visio安装包

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

C语言指针基础学习

/ 等效于 *(*(matrix+1)+2) = 10。printf("arr[1]地址:%p == %p\n", &arr[1], arr+1);0x2000 → [int, int, int, int] // 第一行。0x3000 → [int, int, int, int] // 第二行。0x4000 → [int, int, int, int] // 第三行。// p存储a的地址,*p获取a的值。

2503_91076057的博客 1512

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【c++】基础之指针

指针

m0_64040304的博客 1471

指针基础

指针基础理解 一级指针 二级指针 指针和数组 指针数组 指针是什么? 指针(pointer)是编程语言的一个对象,利用地址,它的值直接指向存储器中另一个地方的值。由于通过地址能找到所需的变量单元,就是说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 指针是个变量!指针是个地址! 指针的大小在32位平台是4...

王白白的博客 236

continue,goto语句、指针基础、特殊指针、一级指针

语⾔中的语句语⾔中的语句一、continue语句简介continue 语句只能⽤于含有循环的语句中, ⽤于在循环语句中结束本次循环继续下⼀次循环. 若是在循环语句中有了 continue,continue 后⾯的语句将不会执⾏注:(1) 只能⽤于循环语句(2) 不是跳出循环, ⽽是结束本次, 继续下⼀次二、代码讲解。

interese的博客 303

C语言指针(基础篇)

文章目录前言一、指针与地址1. 变量与内存2. 地址与指针3. 常量、变量、内存、地址、指针的关系二、指针的基础操作1.大端模式与小端模式2. 指针的定义与初始化2.1 指针的定义与初始化2.2 一个例子2.3 指针的定义与初始化举例及图示3. 指针的运算4. 示例演示三、二级指针 前言       指针是C语言的灵魂,C语言因为指针而在众多语言中所向披靡,也使得C语言一直盛行到现在。因为指针的存在也使得C语言的可操作性极大提升,学好指针是十分必要

liung_的博客 4164

指针基础 - golang版

Go 语言中,使用符号来定义指针类型;

S_numb的博客 774

指针基础讲解

指针基础讲解

qq_73643549的博客 218

【C语言】指针1——基础(超级详解包懂)

计算机内存(Memory)是用于临时存储程序和数据的硬件设备,CPU可直接访问,是计算机运行时的核心工作区域。CPU处理数据时,从内存中读取数据,处理后的数据也会放回内存中。它是外存与CPU沟通的桥梁,所有程序的运行都在内存中进行。通俗易懂地讲,内存是程序运行的舞台,指针是操作内存的工具。

2401_87753837的博客 931

c和指针 指针基础知识

参考书籍是 《C和指针》 第二版

每日三省吾身,按时吃饭否 按时睡觉否 按时喝水否 374

关于指针的基础笔记

本文是在下对指针基础知识的笔记和一些理解,如果有不正确的地方还请大佬指点。后续会不间断更新笔记,也是在学习的路上留一些足迹吧。

INPO_T的博客 570

【C语言】指针篇——你必须要掌握的指针基础知识

文章目录前言一、指针概述指针的创建指针的大小如何使用指针二级指针二、野指针形成野指针的原因如何规避野指针三、指针的基本运算指针+- 整数指针-指针四、指针和数组五、指针数组总结 前言 指针是C语言的重点和难点,熟练的掌握指针能够更好的理解计算的存储方式,同时简化代码,增强程序的效率。 一、指针概述 指针是个变量,存放内存单元的地址(编号)。 指针的创建 在定义指针变量的时候,在变量前面加上’ * ',代表这个变量是一个指针,再往前面加上一个类型名,就代表指针的类型,称为XX指针。 指针的初始化:

qq_52145272的博客 1406
上一篇: 数组与字符串
下一篇: 结构(体)
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值