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

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

如果指针变量是用来存放地址的,那么指针变量的大小就得是4个字节的空间才可以,同理,如果是64位机器,指针变量的大小就是8个字节。...结论: 32位平台下地址是32个bit位,指针变量的大小是4个字节 64位平台下地址是64个bit位,指针变量的大小是8个字节 指针变量的大小和类型无关,只要是指针类型的变量,在相同的平台下,大小都是相同的...但是也有局限性,void*类型的指针不能直接进行指针的+-整数和解引用的运算。...10;//err *pc = 0;//err return 0; } 运行代码的结果: 从这里我们可以看到,void*类型的指针可以接收不同类型的地址,但无法直接进行指针运算。...四.指针运算 指针的基本运算有三种: 指针+-整数 指针-指针 指针的关系运算 4.1--指针加减整数 --我们直接举个例子看看吧,因为数组在内存中是连续存放的,只要知道第一个元素的地址,顺藤摸瓜就可以找到后面的所有元素

77510

【C语言笔记】指针变量的运算

前言 指针变量也是可以进行运算的,如指针变量对其自身加上某个整数或减去某个整数,这在内存上体现为:相对这个指针向后偏移多少个单位或向前偏移了多少个单位,这里的单位与指针变量的类型有关。...pc += 2; pd += 2; printf("pa1=%d, pb1=%d, pc1=%d, pd1=%d\n", pa, pb, pc, pd); //减法运算...因为pa为int类型的指针,所以加减运算是以4字节(即sizeof(int))为单位地址向前向后偏移的。看下图: ?...从本示例程序中,还可以看出:连续定义的变量在内存的存储有可能是紧挨着的,有可能是分散着的。...以上就是关于C语言指针变量运算的一些总结:指针变量与整数相加相减是相对该指针指向的地址向后向前偏移多少个单位。这里的单位不能认为总是1。

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

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

    如果指针变量是用来存放地址的,那么指针变量的大小就得是4个字节的空间才可以。...三、指针变量类型的意义 指针变量的大小和类型无关,只要是指针变量,在同一个平台下,大小都是一样的。那既然这样,为什么指针还要有这么多各种各样的指针类型嘞?是多此一举吗?...但是也有局限性, void* 类型的指针不能直接进行指针的+ - 整数和解引用的运算。...pc = &a; *pa = 10; *pc = 0; return 0; } F5一下: VS2022编译的结果 我们可以发现,void* 类型的指针可以接收不同类型的地址,但是无法直接进行指针运算...四、指针运算 指针的基本运算有三种,这里我们主要实现一下三种基本运算的代码: (一)指针+- 整数 因为数组在内存中是连续存放的,只要知道第一个元素的地址,只要顺藤摸瓜就能找到后面的所有元素。

    1K21

    #C语言——学习攻略:深挖指针路线(一)--指针变量、地址、意义与指针运算

    2.2 指针变量和解引用操作符 2.2.1 指针变量 --当我们想将&取出的地址存起来时,我们就需要一个变量来操作,这个变量就是指针变量; int main() { int a = 10; //printf...("%p\n", &a); //输出指针,%p int* pa = &a;//&取出a的地址并存在指针变量pa中 return 0; } --指针变量也属于变量,它是专门来存放地址的,任何存在指针变量中的数值都被视为地址...但也有局限性,void*类型的指针不能直接进行指针的加减整数和解引用的运算。...指针运算 --指针的基本运算有三种: 指针+ -整数 指针-指针 指针的关系运算 4.1 指针加减整数 --在学习数组时,了解到数组在内存中是连续存放的;那是不是可以用指针运算的特性来实现打印数组呢?...4.3 指针的关系运算 --通过比较指针的大小来打印输出,来感受一下: int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int* p = arr

    36510

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

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

    4.2K2420

    指针运算(一)

    1、取地址运算与赋值运算 取地址运算的运算符是“&”,前面学习 scanf函数时已经使用过该运算符,其一般形式为&变量。 取地址运算符是单目运算符,其作用是返回其后的变量(包括数组元素)的地址。.../获得变量d的地址并赋值给指针变量pd 对指针变量进行赋值运算时,要求赋值运算符右边表达式的地址类型与左边指针变量的类型相同。...相同类型的指针变量之间也可以进行赋值,例如: qa=pa; 2、取内容运算 取内容运算的运算符是“*”,其一般形式为: *指针表达式 取内容运算符是单目运算符,其后的“指针表达式”运算结果是一个...该运算符 也称为“间接访问运算符”,其作用是访问“指针表达式”计算出的地址对应的存储单元。...这两种运算可以进行混合运算,例如,给定如下指针变量的定义 int *p, a=10; p=&a; 表达式“*&a”计算结果是10,计算过程是先计算&a,获得a的地址,然后对该地址进行间接访问得到最终结果是

    69110

    变量运算及循环变量

    修改变量的值 变量就像一个存储数据的盒子,每次设置变量的值,就会修改变量中存储的内容,就像是把盒子里旧的内容倒掉清空,再替换成新的内容。...PHP n = 'f' n = n + 'ood' 先计算等号右边: 定义变量n,并把n的值设为’f’ 再把拼接好的字符串’food’ 存储到等号左边的变量n中 设置变量的值需要使用‘=’符号。...变量 = 值 PHP a = 'xiao' a + 'wangzi' print(a) 程序会计算算式,得到结果xiao, 但不会把结果存储到变量a中,a的值不会改变。...‘+=’符号的作用是:先计算加法,再设置变量的值。 PHP n = 'f' n += 'ood' 先把左边的变量n与’ood’拼接起来, 得到字符串’food’,再把结果存储到变量a中。...每一次循环 ==> 前一个i值+1 变量 i 开始的值总是0,每次循环,变量 i 的值都比上一次+1, 结束的值是重复次数-1。 可以利用循环变量得到连续增大的数字。

    2.1K10

    8.2 指针变量

    指针变量的基类型用来指定此指针变量可以指向的变量的类型。 2、指针变量前面的“*”表示该变量的类型为指针变量。...02 怎样引用指针变量 1、给指针变量赋值。如:p=&a;指针变量p的值是变量a的地址,p指向a。 2、引用指针变量指向的变量。...如已执行“p=&a”,即指针变量p指向了整型变量a,则printf(“%d”,*p);其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值。 3、引用指针变量的值。...如:printf(“%o”,p);作用是以八进制形式输出指针变量p的值,如果p指向了a,就是输出了a的地址,即&a。 4、&取地址运算符。&a是变量a的地址。...5、*指针运算符,*p代表指针变量p指向的对象。 03 指针变量作为函数参数 1、函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。

    7093229

    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

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

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

    2.7K30

    指针(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的地址是同一个,这也就说明函数的地址就是函数名的地址。

    47910

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

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

    2.6K20

    C++指针运算

    C++指针运算 指针变量加或减 一个整数   p++; p--; p+i; p-i; C++规定,一个指针变量加或减一个整数是将该指针变量的原值和它指向的变量所占用的内存单元字节数相加或相减。...C++指针变量赋值  将一个变量地址赋给一个指针变量。...C++两个指针变量可以相减  如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。...C++两个指针变量比较  若两个指针指向同一个数组的元素,则可以进行比较,指向前面的元素的指针变量小于指向后面元素的指针变量。...使用指针的缺点是: 指针使用实在太灵活,对不熟练的程序员来说,很容易出错,而且出现的错误很难发现。 C++指针运算 更多案例可以go公众号:C语言入门到精通

    1.5K2118

    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 数组指针变量初始化 关于数组指针变量的初始化有两种方式

    52910

    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

    21010

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

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

    38400
    领券