首页
学习
活动
专区
圈层
工具
发布

【C语言指针超详解(一)】--指针变量和地址,指针变量类型的意义,指针运算

,这种变量就是用来存放地址的 ,存放在指针变量中的值都会理解为地址。...如果指针变量是用来存放地址的,那么指针变量的大小就得是4个字节的空间才可以,同理,如果是64位机器,指针变量的大小就是8个字节。...结论: 32位平台下地址是32个bit位,指针变量的大小是4个字节 64位平台下地址是64个bit位,指针变量的大小是8个字节 指针变量的大小和类型无关,只要是指针类型的变量,在相同的平台下,大小都是相同的...char*类型的指针变量。...那void*指针到底有啥用呢,一般void*类型的指针是使用在函数参数的部分,用来接受不同类型数据的地址,这样的设计可以实现泛型编程的效果,使得一个函数来处理多种类型的数据,这个在后续的指针超详解篇中会给大家分享

73710

C语言指针深入详解(一):内存和地址、指针变量和地址、指针变量类型的意义、指针运算

整型变量占用4个字节,我们只要知道了第一个字节地址,顺藤摸瓜访问到4个字节的数据也是可 行的。 (二)指针变量和解引用操作符(*) 我将分为指针变量、拆分指针类型、解引用操作符三部分来介绍。...,这种变量就是用来存放地址的,存放在指针变量中的值都会理解为地址。...如果指针变量是用来存放地址的,那么指针变量的大小就得是4个字节的空间才可以。...4个字节(x32环境) • 64位平台下地址是64个bit位,指针变量大小是8个字节(x64环境) • 注意指针变量的大小和类型是无关的,只要指针类型的变量,在相同的平台下,大小都是相同的。...三、指针变量类型的意义 指针变量的大小和类型无关,只要是指针变量,在同一个平台下,大小都是一样的。那既然这样,为什么指针还要有这么多各种各样的指针类型嘞?是多此一举吗?

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

    【C语言指针超详解(四)】--字符指针变量,数组指针变量,二维数组传参的本质,函数指针变量,函数指针数组,转移表

    二.数组指针变量 2.1--数组指针变量的定义 --之前我们学习了指针数组,指针数组是一种数组,数组中存放的是地址(指针)。那么这里的数组指针肯定就是一个指针变量了。...我们已经非常熟悉整型指针变量和浮点型指针变量,那么我们利用这两种变量来看看数组指针变量把: 整形指针变量: int * pint; 存放的是整形变量的地址,能够指向整形数据的指针。...浮点型指针变量: float * pf; 存放浮点型变量的地址,能够指向浮点型数据的指针。​​​ 那么数组指针变量应该就是:存放的是数组的地址,能够指向数组的指针变量。...("已退出计算机程序\n"); } else { printf("选择错误\n"); } } while (input); return 0; } 往期回顾: 【C语言指针超详解...(一)】--指针变量和地址,指针变量类型的意义,指针运算 【C语言指针超详解(二)】--const修饰指针变量,野指针的辩析,assret断言,指针的使用和传址调用 【C语言指针超详解(三)】--数组名的理解

    69610

    C++定义指针变量 | 使用指针变量

    C++指针变量的定义 C++规定所有变量在使用前必须先定义,即指定其类型,在编译时按变量类型分配存储空间,对指针 变量必须将它定义为指针类型。...//定义整型变量 int i,j; //定义指针变量 int *point_num; 上述定义的指针变量point_num是指向整型数据的指针变量,也就是说,指针变量pointer_num只能用来指向整型数据...int就是指针变量的基类型,指针变量的基类型用来指定该指针变量可以指向的变量的类型。 ...即*不是指针变量名的一部分,在定义变量时在变量名前加一个*表示该变量是指针变量。 在C++中怎样使一个指针变量指向另一个变量呢?...只需要把被指向的变量的地址赋给指针变量即可: point_num1=&i; 在C++中,一般编译系统为每一个指针变量分配4个字节的存储单元,用来存放变量的地址, 在定义指针变量时要注意:  不能用一个整数给一个指针变量赋初值

    4.2K2420

    指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)

    一、二级指针 问:指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?...答:二级指针,用来存放以及指针变量的地址 int main() { int a = 10; int *p = &a;//取出a的地址 //p是指针变量,一级指针 int* *...pp = &p; //int*说明pp指向的对象的类型是int* // *说明pp是变量,pp是二级指针,用来存放以及指针变量的地址 //指针变量也是变量 int*** ppp = &pp;/...浮点型指针变量: float * pf; 存放浮点型变量的地址,能够指向浮点型数据的指针。 那数组指针变量应该是:存放的应该是数组的地址,能够指向数组的指针变量。...如果我们要将函数的地址存放起来,就得创建函数指针变量咯,函数指针变量的写法其实和数组指针非常类似。

    1.9K10

    CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针

    普通变量和指针变量 共性 PS: 可见这4个函数的汇编指令完全一致,无论是什么类型的指针变量,对指针变量的读写跟普通变量没有任何区别,所谓的指向只是描述指针变量的值时多少而已,就读写而言,指针变量跟普通变量没有任何区别...特性 普通变量的值常常用于数学计算,而指针变量常常用来定位内存。...普通变量可以不赋初值,但是指针变量的初值必须万分慎重,因为未来的*操纵会以这个初值为目标内存地址,往里面读写数据(可以才C primer plus中看到相应分析) 所以给指针变量赋值一定要是合法合理的内存地址...空指针和野指针 野指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。...指针变量的+-运算 指针变量的加减运算:也就是做地址偏移,不同 的指针类型偏移的步长不同。

    2.6K30

    8.2 指针变量

    01 怎么定义指针变量 1、一般形式 类型名 *指针变量名; 例子:int *point_1,*point_2; 左端的int是在定义指针变量时必须指定的“基类型”。...指针变量的基类型用来指定此指针变量可以指向的变量的类型。 2、指针变量前面的“*”表示该变量的类型为指针变量。...4、指向整型数据的指针类型表示为“int”,读作“指向int的指针”或简称“int指针”。 5、指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。...02 怎样引用指针变量 1、给指针变量赋值。如:p=&a;指针变量p的值是变量a的地址,p指向a。 2、引用指针变量指向的变量。...如已执行“p=&a”,即指针变量p指向了整型变量a,则printf(“%d”,*p);其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值。 3、引用指针变量的值。

    6963229

    C语言中只读指针变量与只读变量指针

    只读指针变量和只读变量指针看着好像有点绕; 只读指针变量:意思是只读指针的变量 只读变量指针:只读变量的指针 本文的主角是const关键字 如果我们开发的时候,定义了某个变量,不想让别人修改时,就可以使用...首先定义两个整型变量 int a = 10; int b = 20; 普通的指针变量 先来看一下普通的指针变量: 我们定义一个普通的int类型的变量a,并初始化为10; 定义一个int类型的指针变量...那么打印出来p的值,就是a的值,10; //普通的指针变量 int *p = &a; printf("%d \n",*p);//10 //指向数值222 *p...也可以修改指针变量的地址; 只读指针变量 //只读指针变量 //这是一个const指针指向的int类型的变量 //const指针指向的整型变量 int *const cp1 = &a; *cp1...= 2;//值可以修改 *cp1 = &b; //cp1 = &b; //指针不能修改 值可以修改; 地址不能修改; 只读变量指针 //一个const指针指向的一个const整型的变量

    3.4K20

    指针(3)---不同指针变量

    事实上, 各种简单类型例如整型int,字符型char等的指针变量事实上意义和用法都大同小异: 整型指针变量:用来存放整型变量的地址, int a = 100; int *p_a = &a; 字符指针变量..."; cahr *p_b = &b; 浮点指针变量:用来存放浮点型变量的地址, float c = 3,14; float *p_c = &c; 2.数组指针变量 指针数组是数组元素是指针的数组; 那么数组指针是什么呢...那么, 数组指针变量也就应该是:存放的应该是数组的地址,能够指向数组的指针变量。...数组指针变量的初始化 数值指针变量用来存放地址,如果我们需要获取数组的地址也就需要用到: &数组名 int arr[10] = {0}; &arr;//得到的就是数组的地址 我们存放数组的地址也就存放在指针数组变量中...3.函数指针变量 数组指针变量是用来存放数组的地址; 函数指针变量是用来存放函数的地址。 那么函数的地址是什么? 可以看到add与&add的地址是同一个,这也就说明函数的地址就是函数名的地址。

    46010

    CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针

    普通变量和指针变量 共性 PS: 可见这4个函数的汇编指令完全一致,无论是什么类型的指针变量,对指针变量的读写跟普通变量没有任何区别,所谓的指向只是描述指针变量的值时多少而已,就读写而言,指针变量跟普通变量没有任何区别...特性 普通变量的值常常用于数学计算,而指针变量常常用来定位内存。...普通变量可以不赋初值,但是指针变量的初值必须万分慎重,因为未来的*操纵会以这个初值为目标内存地址,往里面读写数据(可以才C primer plus中看到相应分析) 所以给指针变量赋值一定要是合法合理的内存地址...空指针和野指针 野指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。...指针变量的+-运算 指针变量的加减运算:也就是做地址偏移,不同 的指针类型偏移的步长不同。

    2.6K20

    7.1 什么是指针和指针变量

    一、指针是什么 解释:由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此,将地址形象化地称为“指针” 二、指针变量 解释:一个变量的地址称为该变量的“指针”,如果有一个变量专门用来存放另一个变量的地址...,则称它为“”指针变量” 注意:指针变量的值是地址 (1)定义指针变量 一般形式 类型名 *指针变量名 注意: ①指针变量前面的“*”表示该变量的类型为指针型变量...②在定义指针变量时必须指定基类型 ③指针变量中只能存放地址,不要将一个整数赋给一个指针变量 例子: ?...(2)指针变量的引用 在引用指针变量时,可能有三种情况 ①给指针变量赋值 ②引用指针变量指向的变量 ③引用指针变量的值 例子: ?...注意:要熟练掌握两个有关的运算符 ① & 取地址运算符 ② * 指针运算符 (3)指针变量作函数参数 函数的参数不仅可以是整型、浮点型 、字符型等数据,还可以是指针类型。

    1.4K3029

    C:指针学习-指针变量—学习笔记

    前言: 本篇文章涉及字符指针变量,数组指针变量,函数指针变量,以及函数指针数组。...* pc = &ch;//取出ch的地址放到ch里 *pc = 'l'; return 0; } pc为字符指针变量,指针变量是变量,存放的是字符,类型是char* 关于字符指针变量还有另外一种用法...在介绍数组指针变量之前,我们需要先提一下字符指针变量,整型指针变量,那这哥两是什么意思呢?...(pc)字符指针变量是一种变量,里面存放的是(&ch)字符指针 (地址) char ch; char* pc = &ch; (pn)整型指针变量是一种变量,里面存放的是(&n)整型指针(地址)...总结:数组指针变量是用来存放数组的地址,数组的地址通过&数组名获得,将数组地址存起来放到数组指针变量中,数组指针变量的类型就是( 数组元素类型(*)[元素个数] ) 2.2 数组指针变量初始化 关于数组指针变量的初始化有两种方式

    49510

    const修饰指针变量

    1.const修饰普通变量 int a = 0; a = 2;//此时变量a可以被修改 const int b = 0; b = 2;//此时b不能被修改 上述代码中n是不能被修改的,其实a本质是变量,...int main() { const int a = 0; int*p = &a; *p = 1; printf("%d\n", a); } 2.const修饰指针变量 首先我们先去分p和*p的含义...*p是p指向的空间,即a(通过p找到a) const修饰指针变量时分为两种情况,可以简单地区分为const关键词在 * 的左边或右边 //在*左边 const int* p int const* p...//在*的右边 int* const p const放在*左边时限制*p,不能通过指针变量p来修改p指向空间的内容;*p = 2 err  但p = &b 是正确的,因为p不受限制 int a = 1...b的空间,a的值未得到改变但*p的值得到了改变 const放在*右边时限制p变量,p变量不能被修改,没办法指向其他变量,但还可以通过p来修改p所指向的对象的内容 int a = 1; int b = 2

    19510

    #C语言——学习攻略:深挖指针路线(四)--字符指针变量,数组指针变量,二维数组传参的本质,函数指针变量,函数指针数组

    数组指针变量 2.1 数组指针变量定义 --在上一篇博客,学习了指针数组,数组存放的是指针;那下面也进行类比: 整型指针变量:int* p,存放的整型变量地址,指向整型数据; 字符指针变量...;char* p,存放的字符型变量地址(字符串,存放的是首字符地址),指向字符型数据 --可知,数组指针存放的是数组地址,指向数组数据; --下面对数据指针变量进行辨析: 1. int* p1[10]...(必须确保加上(),使p先于和*结合) 2.2 数组指针变量的初始化 --数组指针变量用来存放数组地址,那么初始化就要获取数组地址:&数组名。...函数指针变量 4.1 函数指针变量的创建 --同样类比其他指针,函数指针就是存放函数地址的,通过地址调用函数,那函数地址怎么获取呢?...#C语言——学习攻略:深挖指针路线(一)--指针变量、地址、意义与指针运算 2. #C语言——学习攻略:深挖指针路线(二)--const修饰、野指针分析、断言和指针的作用 3.

    33800

    【C语言指针超详解(二)】--const修饰指针变量,野指针的辩析,assert断言,指针的使用和传址调用

    往期回顾: 【C语言】--指针超详解(一) 一.const修饰指针 1.1--const修饰变量 --变量是可以修改的,如果把变量的地址交给一个指针变量,通过指针变量可以修改这个变量。...1.2--const修饰指针变量 --const修饰指针变量,可以放在*的右边和左边,意义不同。 int * p;//没有const修饰?...const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。...2.2.3--指针变量不再使用时,及时置NULL,指针使用之前检查有效性 当指针变量指向⼀块区域的时候,我们可以通过指针访问该区域,后期不再使⽤这个指针访问空间的 时候,我们可以把该指针置为...} 2.2.4--避免返回局部变量的地址 如造成野指针的第3个例子,不要返回局部变量的地址。

    50810

    【C语言指针四】数组指针变量、二维数组传参本质、函数指针变量、函数指针数组

    1.1什么是数组指针变量 什么是数组指针呢?...顾名思义就是指向数组的指针,其变量是指针变量。数组指针变量存放的是数组的地址。 这里我们着重对比一下对比:指针数组是元素为指针的数组,数组中存放的是地址(指针)。 老办法,照猫画虎!!...• 整形指针变量: int * pint; 存放的是整形变量的地址,能够指向 整形 数据的指针。 • 浮点型指针变量: float * pf; 存放浮点型变量的地址,能够指向浮点 型数据的指针。...⼀个指针变量,然后指针指向的是一个大小为10个整型的数组。...如下图所示: 于是,我们得到结论: 二维数组传参,形参的部分可以写成数组,也可以写成指针形式 三、函数指针变量 3.1 函数指针变量的创建 什么是函数指针变量呢 函数指针变量就是用来存放函数地址的

    31510

    栈指针&& 帧指针详解

    另外,C语言的地址操作符"&"被应用到一个局部变量上时,我们就需要为该变量生成一个地址,即为变量的地址指针分配一空间。最后,B函数会使用栈来保存调用任何其他函数的参数。...14 movl -4(%ebp),%ecx # 然后把局部变量c中的内容放到这个指针所指位置处。...前两行用来设置保存调用者的帧指针和设置本函数的栈帧指针,第5行通过把栈指针esp下移4字节为局部变量c分配空间。6~15行是swap函数的主体部分。...第19~21行是main()函数的设置部分,在保存和重新设置帧指针之后,main()为局部变量a和b在栈中分配了空间。第22~23行为这两个局部变量赋值。...因此为了达到修改的目的就需要向函数传递变量的指针(即变量的地址)。

    10.4K31

    golang 利用指针导出变量

    golang 利用指针导出变量 1 golang中的指针类型:unsafe.Pointer & uintptr unsafe.Pointer 类似 C 的 void *,在golang中是用于各种指针相互转换的桥梁...uintptr 是golang的内置类型,能存储指针的整型,uintptr 的底层类型是 int,和 unsafe.Pointer 可相互转换。...unsafe.Pointer 用于转换不同类型指针,不可以参与指针运算 uintptr 用于指针运算,GC会自动回收 uintptr 类型的目标 Go语言是强类型语言,指针也是具有明确类型的对象,进行严格类型检查..." ) func main() { var v *p.V = new(p.V) // 分配一段内存并返回一个指针,v是类型为p.V的一个指针 var i *int32 = (*int32...)(unsafe.Pointer(v)) // 将指针v转成通用指针,再转成int32指针,不能直接将v转成int32类型的指针 *i = int32(98) // 改变v的私有成员i的值

    1.1K70

    【C++】C++ 引用详解 ④ ( 函数返回 静态变量 全局变量 的 引用 指针 )

    一、函数返回 静态变量 / 全局变量 的 引用 / 指针 1、函数返回局部变量引用或指针无意义 上一篇博客 【C++】C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 的引用或指针 | 函数内的...“ 局部变量 “ 的引用或指针做函数返回值无意义 ) 得出如下结论 : 函数的返回值 是 “ 局部变量 “ 的 引用 或 指针 时 , 是无意义的 ; 函数 执行完毕后 , 该 函数对应的 栈内存 会被回收..., 相应的 局部变量 地址 也有没有了意义 , 此时 , 再持有一个 函数返回的 没有意义的 引用 / 指针 , 取出的值是随机无意义的值 ; 2、函数返回静态变量/全局变量的引用或指针 函数 返回的是..." 静态变量 " 或 " 全局变量 " 的 引用 / 指针 时 , 是可以的 ; 如果 函数 的 返回值 是 静态变量 或 全局变量 的引用 , 这两种变量 一旦分配内存后 , 在整个程序的生命周期中..., 该内存都不会被回收 , 返回它们的 引用 / 指针 , 可以正常访问 对应 内存中的数据 ; 3、代码示例 - 函数返回静态变量/全局变量的引用或指针 在下面的代码中 , fun 函数作为 参照

    1.8K30

    C语言|图解指针变量

    = NULL; 图解: 1.1 己址和己空间 指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。...1.2 己值、他址、他空间 指针变量的值就是其指向的空间的地址,指向的地址的空间大小就是指针变量指向类型的大小。...1.3 声明与初始化 当声明一个指针变量,没有初始化时,指针变量只获得了其自身的内存空间,而其指向还没有确定,此时指针变量解引用做左值是非法操作。...,另一个函数(如下例的stackFrame_reuse())执行时,该空间会被stackFrame_reuse()重复使用,a所使用的空间将不复存在,所以当一个指针变量指向局部变量的内存空间时,其地址值传递给主调函数时...#include #include int g(int **iptr) { // 当试图修改主调函数的一级指针变量时,被调函数的参数是一个二级指针 if

    2.5K20
    领券