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

C语言指针 1 引发的思考

问题背景 最近有小伙伴对于 C 语言指针的运算有点疑问:指针变量 1 之后,到底向后偏移了几个字节呢?...理解指针 指针定义 每个指针都对应一个类型。这个类型表明该指针指向的是哪一类对象。指针类型不是机器码中的一部分,而是C语言提供的一种抽象,帮助程序员避免寻址错误。 每个指针都有一个值。...NULL 指针 C语言标准中定义了 NULL 指针,作为一种特殊的指针变量,其指向的内容为空(即不指向任何东西)。将其赋值给某个指针变量,表示该指针目前并未指向任何东西。...指针转换 通过类型转换,可以将指针从一种类型转换为另一种形式,改变的只是它的类型,值是不会改变的。 C语言中的类型转换有两种:隐式类型转换和强制类型转换。...指针运算 C语言指针运算有两种形式。 第一种:指针 ± 整数 这种计算出来的值,会根据该指针指向的某种数据类型的大小进行伸缩。

1.5K20

c语言进阶指南(9)(指针指针类型

*欢迎来到博主的专栏——C语言进阶指南博主id:reverie_ly*@toc指针计算机中的内存的最小单位是比特(bit),每一个比特位都是一个二进制数。...所以C语言用一个专用来存储地址值的类型的变量,称为指针变量。指针的声明指针变量的声明与普通变量的声明类似,只是变量类型不同。...这些变量的类型是由存储的地址的变量来决定的char c;int i;long l;float f;double d;char *pc=&c;int *pi=&i;long*pl=&l;float* f=...&f;double* d=&d;指针类型需要和存储地址变量一致才能完整的对该地址的数据进行操作(后面会介绍不一致时会导致的事情)指针的初始化如果指针只声明不初始化,指针会指向一个随机的区域int *pi...这种指针被称为野指针虽然在vs中引用了这种随机的指针会报错,不会对计算机造成实质上的伤害,但是还是要注意。野指针可以分类成一下几种。

9210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C 语言指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )

    文章目录 一、指针类型变量 二、使用 * 操作内存 一、指针类型变量 ---- 指针 也是 变量 , 也占用内存空间 , 可以用于保存 内存地址 ; 测试 指针 变量占用的内存空间大小 : 定义一个 int...* 指针类型变量 , 使用 sizeof 函数 获取该变量的大小 ; 代码示例 : #include #include int main() { int...a = 8; // 声明指针类型变量 int *p = 888; // 声明二级指针类型变量 int **p2 = 8888; // 打印 变量 a , b...: 声明 指针 时 , * 表示声明的变量是指针变量 ; 使用指针 : 使用 指针 时 , * 表示操作 指针 指向的 内存空间 的数据 ; 操作内存 : *p 相当于 通过 指针地址 ( p 变量值...写出 ) 该内存中存储的数据 ; 代码示例 : #include #include int main() { int a = 8; // 声明指针类型变量

    64510

    C 语言指针数据类型 ( 指针步长 | 复杂指针阅读技巧 )

    文章目录 一、指针步长 二、复杂指针阅读技巧 一、指针步长 ---- 指针 也是一种 数据类型 , 其 类型指针 指向的 内存空间 的 数据类型 ; 指针步长 : 根据 指针 指向的 内存空间 数据类型...参考 【C 语言指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)3...int* , 即 int 类型指针类型 ( 3 ) 函数类型的 第二个参数是 int (*f)(int*) 也是一个函数类型指针 3...., 其返回值是 int 类型, 参数是 int* 指针类型 总结 : 指针 p 是一个指向 int(int*, int (*f)(int*)) 类型函数的指针, 函数返回值是 int...类型, 参数是 int* 指针类型 和 int (*)(int*) 函数指针 类型 指针 f 是一个指向 int(int*) 类型函数的指针, 其返回值是 int 类型, 参数是 int* 指针类型

    48310

    C语言-指针作为函数形参类型

    前言 C语言函数里最常用就是指针传参和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数的参数和返回值几乎都是指针类型...这篇文章就介绍如何使用指针作为函数参数、并且使用指针作为函数返回值。 下面通过几个示例代码来演示用法。 2....在子函数里通过指针类型间接交换main函数里局部变量空间的值 #include #include void func(int *a,int *b); int main...c=*a; *a=*b; *b=c; } //return语句只能返回一个值 //如果函数想返回多个值,可以使用指针(形参)实现。...函数返回指针类型 #include #include char *func(char *p); int main() { char str[]="1234567890

    1.6K30

    C 语言指针数据类型 ( 野指针 | 避免野指针推荐方案 )

    文章目录 一、野指针 二、避免野指针推荐方案 一、野指针 ---- 参考 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 ) 四....野指针 ( 程序BUG根源 ) 博客章节 ; 野指针产生原因 : 指针变量 指向的 内存空间 被释放 , 但是 指针变量 还保存着一个地址值 , 此时不能随便修改该地址值 中的数据 ; 指针变量 与 指针指向的内存空间数据值...是不同的概念 ; 二、避免野指针推荐方案 ---- 避免野指针方法 : 定义指针变量 置空 : 声明 指针变量 时 , 为其设置初始值 NULL ; char *p = NULL; p = (char...*)malloc(10); 释放内存后 指针变量 置空 : 释放 指针变量 指向的内存后 , 立刻将指针变量设置为 NULL ; free(p); p = NULL; 只要 声明指针 , 一律给 指针变量...设置 NULL 初始值 ; 只要 释放指针 , 一律将指针变量设置 NULL ; 这样 使用指针 前 , 判断该 指针变量 是否为 NULL , 就可以判断该指针是否是有效指针 ;

    25120

    C语言指针做函数参数,指针做函数返回类型

    指针做函数参数: 在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。...因为把数组传入函数时传递的是地址,所以那个函数内部可以修改数组的值, 为了保护数组的值不被函数修改破坏,可以设置参数为const: int sum (const int a[ ],int b); C语言为什么不允许直接传递数组的所有元素...而数组是一系列数据的集合,数据的数量没有限制,可能很少,也可能成千上万,对它们进行内存拷贝有可能是一个漫长的过程,会严重拖慢程序的效率,为了防止技艺不佳的程序员写出低效的代码,C语言没有从语法上支持数据集合的直接赋值...指针的函数返回类型: 程序编译后,每个函数都有执行第一条指令的地址即首地址,称[函数指针。函数指针即指向函数的指针变量,要间接调用函数可以使用指针变量来实现。...,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针请尽量不要指向这些数据,C语言没有任何机制来保证这些数据会一直有效,它们在后续使用过程中可能会引发运行时错误

    2.6K20

    C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组指针类型 定义数组指针 )

    文章目录 总结 一、使用 数组指针类型 定义数组指针 二、完整代码示例 总结 // 首先 , 定义 数组指针类型 别名 typedef int(*ArrayPointer)[3];...// 然后 , 声明一个 数组指针类型 变量 ArrayPointer p = NULL; 一、使用 数组指针类型 定义数组指针 ---- 使用 数组指针类型 定义数组指针 , 首先 , 使用...[3] = {0}; 最后 , 声明一个 数组指针类型 变量 , 将 array2 变量地址赋值给该 数组指针类型 变量 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ;..., 数组元素是指针 (作为参考) char *array = {"12", "ab", "34"}; // 数组指针 , 使用指针变量指向数组 // 使用 数组指针类型 定义数组指针...int array2[3] = {0}; // 最后 , 声明一个 数组指针类型 变量 // 将 array2 变量地址赋值给该 数组指针类型 变量 // 指针指向的数据类型

    3K10

    C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组类型* 定义数组指针 )

    文章目录 总结 一、使用 数组类型* 定义数组指针 二、完整代码示例 总结 typedef int(ArrayType)[3]; ArrayType *p = NULL; 一、使用 数组类型...* 定义数组指针 ---- 数组类型指针 就是 定义一个指针 , 指向数组首地址 ; 使用 数组类型* 定义数组指针 , 首先 , 定义数组类型 别名 , typedef int(ArrayType...)[3]; 然后 , 使用别名类型 , 声明数组变量 , ArrayType array2 = {0}; 最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 , 指针指向的数据类型为...int[3] 数组类型的变量 array2 ; ArrayType *p = NULL; p = &array2; 验证上述 定义的数组指针 : 为 数组元素 赋值 , //...// 最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 // 指针指向的数据类型为 int[3] 数组类型的变量 array2 ArrayType *p = NULL;

    3.4K20

    C语言指针(野指针)

    2:如何规避野指针 1.1:指针变量的初始化 2.2:指针越界访问 3.3:指针指向的空间如果我们还回去的话,就把指针指针置为NULL  4.4:指针使用之前检查有效性 1:什么是野指针?...指针越界也会导致野指针问题,这里解释下:就是当你指针指向的范围超过数组名范围时,那么那个指针就是野指针了。...{ *p = i; //i每次循环赋值给指针p p++; //指针增+1,代指arr元素+1 //*p++ = i 也是可以,这里虽说++优先级更高,但是它是后置运算符 }...程序通常使用空指针来表示条件,例如未知长度列表的结尾或未执行某些操作; 这种空指针的使用可以与可空类型和选项类型中的Nothing值进行比较。...空指针不应与未初始化的指针混淆:保证空指针与指向有效对象的任何指针进行比较。但是,根据语言和实现,未初始化的指针可能没有任何此类保证。它可能与其他有效指针相等; 或者它可能比较等于空指针

    2.6K20

    C - 指针C语言指针的总结

    C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一个字节都有一个内存地址,这个地址是一个十六进制的数。...什么是指针:变量的地址叫做指针指针就是地址,地址就是指针。 下面通过一张图可以更直观的理解内存中的地址 ? 内存中的地址演示图 2. 指针 指针C语言的灵魂。指针变量占据8个字节。...*表示这个变量不是一个普通变量,而是一个专门用来存储地址的指针变量,所以有哪些普通的数据类型,就可以有哪些类型指针。...** 一个指针变量并不是可以存储任意类型的变量的地址,而是有限定的,只能存储和这个指针类型相同的普通变量的地址。** 所以p 指针变量中只能存储int类型变量的地址。...指针与整数的加减法 指针可以和整数进行加减运算,指针+1并不是在指针地址的基础之上一个字节的地址,而是在这个指针地址的基础之上一个单位变量占用的字节数,例如:如果指针类型是int * 则+1代表

    4.2K81

    C语言指针

    二、指针的定义 三、指针的初始化 四、指针运算符 五、指针的用途举例 六、关于指针的疑问 指针C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。...* 看下面的代码,利用指针p读取变量c的值 1 int i = 2; 2 char c = 1; 3 4 // 定义一个指向char类型指针 5 char *p = &c; 6 7 // 取出 8...* 如果我改一下第5行的代码,用一个本应该指向int类型变量的指针p,指向char类型的变量c int *p = &c; 我们再来看一下输出: ? ,c的原值是1,现在取出来却是513,怎么回事呢?...这个要根据内存来分析 根据变量的定义顺序,这些变量在内存中大致如下图排布: 其中,指针变量p和int类型变量i各占2个字节,char类型c占一个字节,p指向c,因此p值就是c的地址 ?...当利用*p来获取变量c的值时,由于指针p知道变量c是char类型的,所以会从ffc3这个地址开始读取1个字节的数据:0000 0001,转为10进制就是1 2> 后来,我们用int *p指向变量c

    3.3K60

    C语言——指针

    指针c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简洁,紧凑,高效,每一个学习和使用c语言的人,都应当深入了解地学习和掌握指针,可以说,不掌握指针就是没有掌握C的精华也可以说...指针C语言的灵魂(doge) 由于通过地址能找到所需的变量单元,可以说,地址指向变量单元,打个比方,一个房间的门口挂了一个房间号2008,这个2008就是房间的地址,或者说,2008"指向"...程序第五第六行的作用就是使p1指向a,使p2指向b,此时p1的值为&a(即a的地址),p2的值为&b(即为b的地址) *注意:定义指针变量时,左侧应有类型名,否则就不是定义指针变量....3.指针指向空间释放即使置NULL 4.避免返回局部变量的地址 5.指针使用之前检查有效性 指针运算 小时候我们就知道1+1等于几 那我问你如果是指针1的话 的是那个数字吗 ?...16进制的C的10进制是12,所以q+1和q相差4  p是整型指针相当于sizeof(int)=4 q是字符型指针相当于sizeof(char)=1; 以上就是我归纳指针的一些小结 如果能帮助友友们 -

    2.3K20

    C语言_初识C语言指针

    为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址 编号 = 地址 = 指针 指针变量 = 变量 = 存放地址的变量 ---- 一、指针 … 一个内存单元多大比较合适.../0 32位机器,上面有32根地址线 2的32次方个字节的空间 - - - 4,294,967,296 Byte — 4GB ---- 通过pa里存放的a的地址找到a ---- 三、指针变量的大小...指针变量是用来存放地址的 32位机器上:地址是32个二进制位,这个地址要存储的话要4个字节,所以在32位机器上,指针变量的大小是4个字节。...64位机器上:地址是64个二进制位,这个地址要存储的话要8个字节,所以在64位机器上,指针变量的大小是8个字节。

    19030

    C语言指针

    学习 C 语言指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。...指针变量就是一种变量, 和其他种类的变量类似, 但指针和其他变量又有区别. 首先C语言作为一种类型语言, 每个变量都会有几个属性. 变量名称. 变量类型. 变量的值....指针变量声明的一般形式为: type *var-name; 在这里,type 是指针的基类型,它必须是一个有效的 C 数据类型,var-name 是指针变量的名称。...Address stored in ip variable: bffd8b3c Value of *ip variable:20 类型 对于C语言来说, 搞清楚变量的类型相当重要, 涉及到指针的时候就更加重要...整个来说: next是一个指针, 指向一个函数, 函数的返回值也是一个指针, 指向一个类型为char的常量指针. C语言类型语言, 即每个变量都有类型.

    2.7K20

    C语言 | 指向指针指针

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例82:C语言用指向指针指针的方法对n个整数排序并输出;要求将排序单独写成一个函数;n个整数在主函数中输入,最后在主函数中输出。...解题思路:读者看着道题的时候,首先要观察一下有什么规律,然后指向指针指针在上一道练习题中已经有了铺垫,读者可以联系上一道题去熟练使用指向指针指针。...C语言源代码演示: #include//头文件 int main()//主函数 { void sort(int **point,int number); //sort排序函数声明

    3K32

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券