首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能在处理指针时使用"++“来递增整型变量的值呢?

在处理指针时,不能使用"++"来递增整型变量的值的原因是指针和整型变量在内存中的存储方式不同。

指针是一个变量,它存储的是一个内存地址,而不是实际的值。当我们使用"++"操作符递增一个指针时,它会使指针指向下一个相邻的内存地址,而不是递增指针所指向的值。

而整型变量是直接存储一个具体的值,使用"++"操作符可以递增整型变量的值。

因此,当我们尝试使用"++"操作符递增一个指针时,编译器会报错,因为这是一种类型不匹配的操作。

如果想要递增指针所指向的值,可以使用"*"操作符来获取指针所指向的值,然后再对该值进行递增操作。例如:

代码语言:txt
复制
int* ptr = ...; // 假设ptr指向一个整型变量
(*ptr)++; // 递增ptr指向的整型变量的值

这样就可以正确地递增指针所指向的值了。

总结起来,不能在处理指针时使用"++"来递增整型变量的值是因为指针和整型变量在内存中的存储方式不同,"++"操作符适用于递增整型变量的值,而不适用于递增指针所指向的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

​面试常问16个C语言问题,你能答上来几个?

第一间看干货文章 1 又快到了金三银四,最近不少小伙伴在准备找工作,这里给大家分享一下面试中经常会遇到一些嵌入式C语言问题,你看看能答上来几个?...:不能以分号结束,括号使用,等等) 懂得预处理器将为你计算常数表达式,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际,是更清晰而没有代价。...goto loop; 5 用变量a给出下面的定义 a) 一个整型数(An integer) b)一个指向整型指针( A pointer to an integer) c)一个指向指针指针,它指向指针是指向一个整型数...第二、static修饰全局变量时候,这个全局变量能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。...精确地说就是,优化器在用到这个变量必须每次都小心地重新读取这个变量,而不是使用保存在寄存器里备份。

90820

一文掌握C语言数组使用

1)全部初始化 初始化列表:用大括号括起来,用于对数组进行初始化一个列表,每个之间通过逗号隔开。 初始化列表只能在定义数组使用,数组定义完成后不能再使用初始化列表给数组赋值。...总结: (1)数组在内存中开辟是线性连续且递增。 (2)在c语言中,任何变量(基本变量指针变量,结构体变量,数组变量空间都是整体开辟,但任何元素起始地址一定是开辟字节当中最小。...三、二维数组 1、二维数组创建和初始化 (1)二维数组创建 二维数组创建,行数可以忽略写。并且所有维度数组其第一个方括号内容可忽略。...(2)形参元素个数可被忽略,并且建议忽略(有可能改变了实参大小,这样比较方便)。或者也可以填写比实参元素个数大。 (3)用sizeof()求数组元素个数,尽量在数组定义求。...因为传参后数组会降维成指针。 2、二维数组 前面说了数组元素降维成指向数组内部元素类型指针,二维int整型数组内部元素不再是int整型,而是具有四个整型一维数组。

1.2K31

详解指针(超详细)(第一卷)

说好今天讲指针,说到做到啦 一.指针概念 1.要学好指针首先要了解什么是指针,首先给个定义它是一种用来存储变量地址变量类型,通常我们也会说指针其实就是一个地址,下面先看一段代码叭 这段代码大意就是定义了一个整型变量...,并赋给它一个,之后将这个整型变量a地址给指针p,最后就可以通过p去找到a,就相当于你把你家地址给我,就可以通过这个地址找到你家(当然啦有点废话文学),不过非常形象。...这时又有人要问了,那既然它们在同一环境下字节相同,为什么还要定义不同变量,这就涉及到我们接下来所讲以及指针运算。...使用智能指针:智能指针可以自动管理动态分配内存,避免手动释放内存出现错误。 3. 检查指针有效性:在使用指针之前,通过检查指针是否为 NULL 或者是否指向有效内存地址确保指针有效性。...使用错误处理机制:在程序中添加错误处理机制,捕获和处理可能出现指针错误。

7210

嵌入式C语言面试题_c语言基础面试题

: 1) #define 语法基本知识(例如:不能以分号结束,括号使用,等等) 2)懂得预处理器将为你计算常数表达式,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际,是更清晰而没有代价...goto Loop 用法: 基本上c语言中推荐goto使用,不符合程序化设计理念,呵呵。...顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确程序,那么为什么还要如此看重关键字const?...精确地说就是,优化器在用到这个变量必须每次都小心地重新读取这个变量,而不是使用保存在寄存器里备份。...#error就是故意设置一些陷阱,防止自己忘记了或者是给别人使用,别人给配置宏一个错误,用#error提醒,这是多么炫酷编译技巧,跟书呆子有毛线关系啊!!!!!!!!!!

81510

第七节(指针

在C程序中声明一个变量,编译器会预留一个内存位置储存该变量,此位置有唯一地址。 编译器把该地址与变量名相关联。当程序使用变量,将自动访问正确内存位置。...在本例中,这两个都是1。 第26行在var前使用了取址运算符,该行打印var地址。 第27行打印指针变量ptr,与第26行打印相同。 该程序清单在认为是一个很好例子。...记住,操纵指向数组元素指针,C编译器不会记录数组开始和结束。 如果不慎,很可能在递增或递减指针,使其指向内存别处(数组前面或后面的位置)。 这些位置上可能储存了其他数据,但并不是数组元素。...可以在数组最后一个元素中储存一个特殊作为数组末尾标志。函数在处理数组,会查看每个元素。当函数发现这个特殊,就意味着到达数组末尾。...当使用函数指针能让你改变被传递变量(无论这些在哪里)。 2:编译器如何知道*指的是乘法、解引用还是声明指针? 编译器根据星号出现上下文确定是哪一种用法。

17840

来看看这些嵌入式工程师常见面试题你会不会

: 1) #define 语法基本知识(例如:不能以分号结束,括号使用,等等) 2) 懂得预处理器将为你计算常数表达式,因此直接写出你如何计算一年中有多少秒而不是计算出实际,是更清晰而没有代价...顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确程序,那么为什么还要如此看重关键字const?...3) 合理地使用关键字const可以使编译器很自然地保护那些希望被改变参数,防止其被无意代码修改。简而言之,这样可以减少bug出现。 8. 关键字volatile有什么含意?...精确地说就是,优化器在用到这个变量必须每次都小心地重新读取这个变量,而不是使用保存在寄存器里备份。...解释为什么。 2) 一个指针可以是volatile 吗?解释为什么

63320

C语言代码优化一些经验及小技巧(一)

) 2、整形变量与零比较 应当将整型变量用“ ==” 或“ !...尽管这不保证编译器一定会使用到寄存器存储变量,也不能保证处理处理能更高效处理unsigned整型,但这对于所有的编译器是通用。...可以通过使用int和unsigned int类型局部变量避免这样移位操作。这对于先加载数据到局部变量,然后处理局部变量数据这样操作非常重要。...=0; i--){} 这里我们需要记住是循环必须终止于0(因此,如果在50到80之间循环,这不会起作用),并且循环计数器是递减使用递增循环计数器代码享有这种优化。...回顾上例,C标准库函数设计者为什么要将getchar声明为令人迷糊int类型? 在正常情况下,getchar的确返回单个字符。

98332

关于CC++ 一些自己遇到问题以及解惑

那么为什么会产生这样效果,揭秘如下. 若是内存递减分配,对于数组和i内存分配如下: ? 若是内存递增分配,对于数组和i内存分配如下: ?        ...现在可能就有人问了,为什么递减分配 i和iarray[2]挨着,而递增i就和iarray[0]挨着,其实这个不难理解,*(iarray+1)一定比*(iarray)地址高不是吗,对于递减分配,必须倒着分配...如果是C,我们可以用%p输出变量地址,若是C++,我们可以用static_cast(&a)输出变量地址,大家若是使用vs,教大家一个小技巧,在调试模式中(F5)下依次单击调试,窗口,...栈区(堆栈区): 存放函数内局部变量,形参和函数返回。栈区之中数据作用范围过了之后,系统就会回收自动管理栈区内存(分配内存 , 回收内存),不需要开发人员手动管理。...当自定义函数中无返回,可以使用该写法。相当于使用了break。 return 0; 当函数有返回使用该写法。

65941

【C语言总集篇】指针篇——从不会到会过程

; 现在我们已经知道了什么是指针,也知道了指针类型意义,现在我们来看一个新概念——野指针; 四、野指针 看到野指针这个野,联想到是野猫、野狗、野猪……现在问题来了,它们为什么被称为野猫、野狗和野猪...: 当指针指向main函数栈帧中空间,你并不能确定它指向是哪一块空间,也就是说,指针p此时可能指向已经被使用地址,那此时对这个空间进行修改,是不是有可能导致代码不能正常运行?...; 对于前面三点,相信大家现在都是能理解,但是对于第4点,可能就有朋友有疑问了,为什么当地址不再使用时要将指针置为空?...对于变量也好、数组也好,它们地址我们可以存放在指针中,那如果想存放指针地址,又应该怎么处理?...,那是不是代表我们可以通过指针修改变量

22810

总结---5

因此这个问题或大或小取决于内存管理算法实现上。        为什么会产生这些小且不连续空闲内存碎片?       ...2,那么char型变量和数组用什么给其初始化比较安全?这种提问没有见过,只能说初始化会使数组指向其他内存单元,导致不确定。最好是在数组初始化时候赋给你需要用。...用变量a给出下面的定义 a) 一个整型数(An integer) b) 一个指向整型指针(A pointer to an integer) c) 一个指向指针指针,它指向指针是指向一个整型数...顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确程序,那么为什么还要如此看重关键字const也如下几下理由: 1)....精确地说就是,优化器在用到这个变量必须每次都小心地重新读取这个变量,而不是使用保存在寄存器里备份。下面是volatile变量几个例子: 1).

837100

ios 笔试题3

精确地说就是,优化器在用到这个变量必须 每次都小心地重新读取这个变量,而不是使用保存在寄存器里备份。下面是volatile变量几个例子:   ?...成员变量属于整个类所拥有,对类所有对象只有一份拷贝; (5)在类中 static 成员函数属于整个类所拥有,这个函数接收 this 指针,因而只能访问类static 成员变量。 ...因此,能从栈获得空间较小。 堆:堆是向高地址扩展数据结构,是连续内存区域。这是由于系统是用链表存储空闲内存地 址,自然是连续,而链表遍历方向是由低地址向高地址。...用变量a给出下面的定义 a) 一个整型数(An integer) b)一 个指向整型指针( A pointer to an integer) c)一个指向指针指针,它指向指针是指向一个整型数...锁被加到所属对象实例级(是这么理解...)。 @synthesize xxx;  实现实际代码

68810

C语言结构体、联合与枚举类型

此外,还有一种特殊结构体类型———匿名结构体,顾名思义匿名结构体就是没有给结构体赋予名字,那么若想创建匿名结构体变量能在结构体声明后才能创建,在函数内部不可创建,当然也推荐大家用匿名结构体类型,毕竟能使用匿名结构体类型场景很少...,这种访问方式是基于结构体指针,因为使用(*)解引用运算符有些冗余 ,可能会造成认知上错误,C语言定义了结构体指针特殊成员访问方式'->'访问,访问方式为: 结构体指针变量 + '->' +结构体成员...,这是为什么?...后面的常量也会依照你所赋依次递增,除非你在后面的常量继续赋值,总的来说,枚举常量可以在范围内任意赋值。...2.枚举优点与使用 你有没有思考过这样一个问题:明明可以直接用#define定义常量,但为什么还非要用枚举类型

9810

【云+社区年度征文】是如何 3 小时上手 Golang

在学 C 语言时候,书上和老师都说“指针就是一个地址”,但是觉得很奇怪,“指针”既然是一个“地址”,为什么直接了当说它是一个“地址”,而是要称呼它为“指针”。...因为 p 是 指向整型指针指针中保存是内存地址,因此对 p 进行赋值时候,在 整型 变量前加一个 & 符号,变量 p 中就保存了 i 地址。... 地址 和 ,第二行输出,分别是 p 地址,p 指向地址 和 p 指向地址中,从指针变量中取出它指向变量,需要使用 * 运算符。...在我们使用 C++ 是,C++ 对象属性是独有的,而方法是公有的,那么当调用这个方法,这个方法是怎么知道操作是哪个对象属性?...协程 test1 用来循环递增 i ,并送给协程 test2,然后由协程 test2 进行打印输出。

71280

C++基础快速入门

:给标识符命名,争取做到见名知意效果,方便自己和他人阅读 2 数据类型 C++规定在创建一个变量或者常量,必须要指定出相应数据类型,否则无法给变量分配内存 2.1 整型 作用:整型变量表示是整数类型数据...ASCII 打印字符:数字 32-126 分配给了能在键盘上找到字符,当查看或打印文档就会出现。...<< endl; system("pause"); return 0; } 总结:前置递增先对变量进行++,再计算表达式,后置递增相反 3.2 赋值运算符 作用: 用于将表达式赋给变量...7.1 指针基本概念 指针作用: 可以通过指针间接访问内存 内存编号是从0开始记录,一般用十六进制数字表示 可以利用指针变量保存地址 ​ 7.2 指针变量定义和使用 指针变量定义语法...2、指针使用 //通过*操作指针变量指向内存 cout << "*p = " << *p << endl; system("pause"); return 0; } 指针变量和普通变量区别

12910

CC++刁钻问题各个击破之细说sizeof

为什么?问得好,将尽全力对此作出解释:其实指针也是变量,只不过这个变量很特殊,它是存放其他变量地址变量。...原因是在函数参数传递,数组被转化成指针了,或许你要问为什么要转化成指针,原因可以在很多书上找到,简单说一下:假如直接传递整个数组的话,那么必然涉及到数组元素拷贝(实参到形参拷贝),当数组非常大...在这里很明显num是运行时才输入,因此sizeof不可能在编译就求得array大小!这样一sizeof又变成是运行时求值了。 那么到底sizeof是编译求值还是运行时求值?...可是当我去验证,编译器根本不让通过!这个是为什么半会想不到,所以还请朋友们补充! 特性8:sizeof求得结构体(及其对象)大小并不等于各个数据成员对象大小之和!...你不能这样使用位域:floatf:8;这是不能通过编译。并且位域变量能在函数或者全局区定义,只能在结构体,自定义类,联合(union)中使用

77420

整型在内存中存储

它不是字符型吗,那是因为 char存储使用ASCII码进行存储,ASCII码都是整数,故可以看做整型家族成员 二、原码、反码、补码详解 (1)符号位 在讲这些之前,得先明白什么是符号位,符号位就是专门用来存储数据符号信息位...有符号数原、反、补码之间转换跟符号位是息息相关 正数原码、反码、补码是一样,因此在计算时候可以不用多费心思 不要问我为什么正数原、反、补一样,1+1为什么等于2真没法解释。...三、整型提升 关于整型提升,首先要明确就是对象,什么样数据会整型提升?其次要明确是条件,在什么条件下数据会进行整型提升?...(2)什么情况下会整型提升? 简单点说就是,你在使用小于int类型变量,又要用int方式进行数据取出,这个时候就会涉及到整型提升。...猜错了吧,为什么会这样?这个就跟整型提升有关了,容先卖个关子,到习题讲解我们会详细叙述。 (3)为什么整型提升,有什么用?

11910

C语言深度解剖 (二)

所属 变量(只读) 常量 void main() { const int a=1; int const b=2; //前面两种方式相同 const int c; //如果在定义赋初值,后面将没有机会...如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中,如果这个变量由别的程序更新了的话,将出现不一致现象 遇到这个关键字定义变量,编译器对访问代码不再进行优化,如何理解这个优化...结果是不一样 main() { union { int i; char a[2]; }*p,u; //一个 union 会占用四个字节,并且会被初始化,这是在局部区域,至于初始化为什么...5 * sizeof(int) 或者 sizeof(a) 个地址转化为整型指针后赋给ptr1 int *ptr2=(int *)((int)a+1); //这个操作是将a地址转化为整型数,然后将加...1,然后将这个整型数转化为整型指针赋给ptr2 printf("%x,%x\n",ptr1[-1],*ptr2); //将内容以十六进制形式输出 } 这里有一个以a开头内容矩阵 00000001

58130

计算机初级选手成长历程——指针(4)

通过这两次测试结果,我们就能得到以下结论: 不同类型二级指针进行加1和减1后,指针变化都为4; 同一类型二级指针进行加减整数后,指针变化为4整数倍; 此时有朋友可能就会好奇了,为什么是4...这个?...而前面我们是在32为操作系统下进行测试,这就是为什么对于二级指针进行+-整数变化为4整数倍。 9.2 二级指针-二级指针 对于一级指针来说,在数组中,指针-指针指针之间元素个数。...,不管是整型数组也好还是整型指针数组也好,都是能够正常访问使用指针[下标]来访问数组元素; 可以看到,此时对指针使用下标引用操作符也是能够正常访问数组各个元素,不管是整型一级指针还是整型二级指针...,不管是整型数组也好还是整型指针数组也好,都是能够正常访问使用指针[下标]来访问数组元素; 可以看到,此时对指针使用下标引用操作符也是能够正常访问数组各个元素,不管是整型一级指针还是整型二级指针

11000

一个printf(结构体指针)引发血案

为什么写这篇文章 在上周六,在公众号里发了一篇文章:C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻,以直白语言、一目了然图片解释指针底层逻辑,有一位小伙伴对文中代码进行测试,发现一个比较奇怪问题...后来一想,烟是为什么让风抽?于是就开始抽风!不对,开始回房间继续抽代码,就不信,这么简单 printf 语句,怎么就搞不定?! 于是就有了这篇文章。 2....那就见鬼了:既然 s 与 p 代表同一个内存地址,但是为什么用 *p 读取 int 型数据,得到却是字符 'a' ? 2....但是还是有点不死心,既然是未定义行为,那么为什么每次打印输出结果都错这么一致?既然是由编译器实现决定,那么使用这个 gcc 版本内部是怎么打印结构体变量?...比如:如果格式化字符串是 %d,那么就从可变参数中提取一个 int 型数据,如果格式化字符串是 %c,就从可变参数中提取一个 char 型数据; 数据处理结束后,使用 va_end 释放 arg 变量

84320
领券