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

【C 语言】变量本质 ( 变量修改 | 直接修改变量 | 通过内存地址间接修改变量 | 通过指针间接修改变量 )

文章目录 一、变量修改 1、直接修改变量 2、通过内存地址间接修改变量 3、通过指针间接修改变量 一、变量修改 ---- 访问 变量 , 就是 访问 内存空间 ; 访问 指的是 读写 内存 ; 修改变量方式...: 直接修改 : 通过 变量 , 可以 直接 修改内存 , 间接修改 : 通过取地址符 , 拿到变量所在内存 地址编号 , 通过地址编号修改内存 ; 1、直接修改变量 #include <stdio.h..., &a=%d\n", a, &a); return 0; } 执行结果 : a=1, &a=6422216 a=2, &a=6422216 3、通过指针间接修改变量 #include <stdio.h...= 2; printf("a=%d, &a=%d\n", a, &a); // 间接修改2 : 通过指针 // 将变量 a 内存地址赋值给 p int *p;...p = &a; // 通过修改 p 指针指向内存 , 修改变量 a 值 *p = 3; printf("a=%d, &a=%d\n", a, &a); return

1.2K10

C语言 | 改变指针变量

例35:C语言编程实现改变指针变量值。 解题思路: 指针p值是可以变化,printf函数输出字符串时,从指针变量p当时所指向元素开始,逐个输出各个字符,直到遇‘\0’为止。...而数组名虽然代表地址,但是它是常量,它值是不能改变。...  p=p+7;//指针变量p指向字符串第8位    printf("%s",p);//输出    return 0;//主函数返回值为0  } 编译运行结果如下: C program language...读者应该特别注意: char *p="I love C program language"; 数组名虽然代表地址,但是它是常量,值不能改变。...p=p+7; 虽然是+7,但是在C语言中,下标是从0开始。 C语言 | 改变指针变量值 更多案例可以go公众号:C语言入门到精通

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

初识指针指针指针变量、如何理解地址指针类型意义、void*指针、野指针、空指针)(笔记)

一、指针概念 指针是一个特殊变量,它里面存储数值被解释成为内存里一个地址。...&a;//pa指针变量 - 存放地址 - 地址又被存放指针 //int* pa,变量类型,变量名字 (变量 即 存放地址) *pa;//*解引用操作符,*pa等价于a //& ---...* //取地址 解引用 return 0; } 二、指针指针变量 指针地址 指针变量变量-存放地址 指针变量用来存放地址...,指针变量并不完全等同指针, 但口头上 指针 一般是 指针变量 2.1指针变量大小 1.指针变量是专门用来存放地址,指针变量大小取决于一个地址存放需要多大空间 32位机器上:地址线32根,地址二进制序列就是...使用空指针进行解引用操作会导致程序崩溃,因为没有任何有效内存地址可供访问。在C语言中,空指针主要用于表示指针变量没有指向任何有效内存地址,例如未初始化指针变量或已释放内存块。

11110

C++指针变量作函数参数接收数组地址

C++指针变量作函数参数接收数组地址 在C++中,用指针变量指向数组元素时要注意: 指针变量p可以指向有效数组元素,实际上也可以指向数组 以后内存单元。...在上一节小林已经讲过:数组名代表数组首元素地址,用数组名作函数参数,传递是数组首元素地址,同样用指针变量作函数形参, 也可以接收从实参传递来数组首元素地址。 ...实参与形参结合,有以下几种形式:  实参 形参 数组名 数组名 数组名 指针变量 指针变量 数组名 指针变量 指针变量 实参数组名array代表一个固定地址,或者说是指针型常量,它值是无法改变;...而形参数组名是指针变量,并不是一个固定地址值,它值是可以改变。...在函数调用开始时,它接收了实参数组首元素地址,但在函数执行期间,它可以再被赋值。 8.2 C++指针变量作函数参数接收数组地址 更多案例可以go公众号:C语言入门到精通

9222218

关于变量指针、别名(引用)和指针指针

今天蛋疼就写一下这些东西区别,变量永远是最简单没有什么技术含量,那么另外一个比较简单就是别名了,其实个人感觉这个东西完全可以看作是一个人“小名”,只是对同一个变量多了一个称呼而已,指向数据和地址是和原变量完全一致...,并且用&进行取地址操作得到地址和原变量地址是完全一致(因而在对指针进行赋值时候如果直接对指针地址操作则需要对变量或者别名使用&进行取地址运算,如果要直接赋值则需要使用*p=进行赋值)。...最复杂就是指针了,同样个人认为指针到头来就是一个地址,这样可能会比较好理解一些。例如*pointer,那么带有*(解引用操作符)时候则是表示数值,如果没有*则表示地址。...也就是说可以将pointer看成一个内存地址在这个地址中保存是另外一个数据地址,当存在*时候表示取该地址存取内容,否则则是取这个变量保存地址。...//指针赋值 ppi=&ppiA; //指针指针赋值 cout< <"变量、别名、指针指针指针关系:"<

1.3K30

可以改变量-变量

1、变量 在程序运行过程中可以改变量叫变量变量是用来存储数值内存区域。 1.1、作用 变量用来记录数值。使用变量进行代数计算,则该变量中数值可以随着程序逻辑计算而改变。...1.2、格式 日常变量使用分为四个部分 变量定义格式:数据类型 变量名 = 变量值; 1.2.1、变量类型(数据类型) 每一个变量均必须指定其变量类型。...1.2.3、“=”号 这里“=”号是运算符一种,即=代表赋值运算,并非数学意义上相等。 1.2.4、变量值 即真正变量存储数值,实际上是一个常量,需要与变量数据类型一致。...="+myVar);//10   //改变变量值 myVar = 20; //打印变量值 System.out.println("运行程序后:myVar="+myVar);//20...(3)变量使用时有作用域限制。 /* 变量使用注意事项: 可以同时定义多个变量 变量定义后可以不赋值,使用时再赋值。不赋值不能使用。

34630

Linux】进程>环境变量&&地址空间&&进程调度

环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性 1.2 常见环境变量 PATH : 指定命令搜索路径 HOME : 指定用户主工作目录(即用户登陆到Linux系统中时,默认目录)...,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾环境字符串 1.6 通过代码如何获取环境变量 1.6.1 命令行第三个参数 #include int main(int argc...能得出如下结论: 变量内容不一样,所以父子进程输出变量绝对不是同一个变量地址值是一样,说明,该地址绝对不是物理地址!...在Linux地址下,这种地址叫做 虚拟地址 我们在用C/C++语言所看到地址,全部都是虚拟地址!...3.Linux2.6内核进程调度队列 上图是Linux2.6内核中进程队列数据结构 3.1 一个CPU拥有一个runqueue 如果有多个CPU就要考虑进程个数负载均衡问题 3.2 优先级

5010

C语言 | 指向结构体变量指针变量

例40:C语言实现通过指向结构体变量指针变量变量输出结构体变量信息。...解题思路:在主函数中声明了struct student类型,然后定义了一个struct student类型变量s_1,又定义了一个指针变量p,它指向一个struct student类型对象,将结构体变量...s_1起始地址赋给指针变量p,也就是使p指向s_1,然后对s_1各个成员赋值。...    struct student *p;//定义结构体指针变量    p=&s_1;//将s_1得地址赋给指针变量    s_1.num=10010;//赋值    strcpy(s_1.name,...思考两个问题,怎么对结构体变量成员赋值?怎么通过指向结构体变量指针访问结构体变量中成员? C语言 | 通过指向结构体变量指针变量输出结构体变量信息 更多案例可以go公众号:C语言入门到精通

1.8K2218

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

前言 指针变量也是可以进行运算,如指针变量对其自身加上某个整数或减去某个整数,这在内存上体现为:相对这个指针向后偏移多少个单位或向前偏移了多少个单位,这里单位与指针变量类型有关。...【注意】一些处理整数操作不能用来处理指针。例如,可以把两个整数相乘,但是不能把两个指针相乘。...因为pa为int类型指针,所以加减运算是以4字节(即sizeof(int))为单位地址向前向后偏移。看下图: ?...如图:pa1所指向地址在pa0所指向地址往后8字节处,pa2指向地址在pa1指向地址往前4字节处。 从本示例程序中,还可以看出:连续定义变量在内存存储有可能是紧挨着,有可能是分散着。...以上就是关于C语言指针变量运算一些总结:指针变量与整数相加相减是相对该指针指向地址向后向前偏移多少个单位。这里单位不能认为总是1。

1.3K20

【C++】函数指针 ② ( 数组类型基本语法 | 数组语法 | 数组首元素地址 和 数组地址 | 定义数组类型 | 定义指针数组类型语法 | 直接定义指针数组类型变量语法 )

地址 ; &array 是 整个数组 地址 ; 数组首元素地址 array , 与 数组地址 &array 是不同 , array + 1 步长是 4 字节 , 也就是 数组元素 大小..., 这是一个指向数组指针 // 指向数组类型是 int[5] 类型 typedef int (*pInt5ArrType)[5]; 使用定义指针数组类型 , 声明并初始化一个指针数组变量 : int5ArrType...myArray = { 1, 2, 3, 4, 5 }; // 注意 : 将 数组地址 &myArray 赋值给 指针数组类型 // 不要把 数组首元素地址 myArray 赋值给 该变量 , 否则会出错...该定义类型是 指针类型 , 该指针指向一个 type[size] 数组类型 数组 ; p 是 定义指针数组类型变量名称 ; size 是 数组大小 ; 直接定义指针数组类型变量示例 : 下面定义了变量...p , 该变量是一个指针类型变量 , 指向 int[5] 类型数组指针 ; // int(*)[5] 是 指向 int[5] 类型数组指针 // 这里不使用 typedef 定义

10930

C语言中“指针”和“指针变量区别是什么

比较严格说法是这样: 系统为每一个内存单元分配一个地址值,C/C++把这个地址值称为“指针”。如有int i=5;,存放变量i内存单元编号(地址)&i被称为指针。...“指针变量”则是存放前述“地址值”变量,也可以表述为,“指针变量”是存放变量所占内存空间“首地址变量(因为一个变量通常要占用连续多个字节空间)。...比如在int i=5;后有一句int *p=&i;,就把i指针&i赋给了int *型指针变量p,也就是说p中存入着&i。所以说指针变量是存放指针变量。...有一个事实值得注意,那就是有不少资料和教科书并没有如上区分,而是认为“指针指针变量简称”,如对int *p=&i;解释是:声明一个int *型指针p,并用变量i地址初始化;而严格说应该是声明一个...int *型指针变量p才对。

57630

初识C语言——初识指针(什么是内存,什么是指针指针变量怎么用,指针大小)

变量是创建内存中(在内存中分配空间),每个内存单元都有地址,所以变量也是有地址。....指针变量 既然变量地址可以使用取地址操作符(&)取出,那可不可以把一个变量地址存储起来呢?...在C语言,有一种专门用来存储地址变量,叫做指针变量。...指针变量定义方法: 类型 * 指针变量名;(*说明该变量是一个指针变量) 我们来演示一下: int num = 10; int *p;//p为一个整形指针变量 p = # 这样就把一个整型变量地址放到了一个整型指针变量里边...为什么不同类型指针变量大小是一样呢?又为什么是4个字节呢? 原因是: 指针是用来存放地址,所以指针变量大小取决于地址大小,而在同一平台上地址大小是固定不变

22610

Linux编程--指针++操作

而不是简单地址加上对应数字? 问题2:在for循环中,phdr_start_addr++为何能找到程序头表中下一个段结构呢?...日志验证 在代码中加入日志,打印phdr起始与结束地址,以及entry总数与每个entry大小。...,+1或者-1都是对于整个结构体而言,所以对于指针操作,每次加1或者-1都会偏移sizeof(struct)大小。...*)指针中进行运算,因为在运行时候会有很多字节对齐操作,如果没有指定类型的话,无法知道对应结构体大小,所以禁止(void *)指针计算。...结论 对于地址加减来说,可以正常按数加减,而且加减完后可以赋值给结构体指针。 而对于指针加减来说,是对于指针对应结构体大小而言,每次加减都是计算N个结构体大小偏移。

82430

慎写指针类型全局变量

简述: 在 关于range二三事[1] 第二个case中,介绍了对于指针类型 切片/map变量A 循环,要格外注意, 迭代出value作用域是整个方法而非循环体内....改进办法:在循环体中引入中间变量,"暂存"下每次迭代value值 但对于这个A,如果是全局变量,则又极有可能出现问题: package main import ( "fmt" ) type UserInfo...为指针类型,tmp仍为指针类型,对其赋值,会改变全局变量defaultInfoSli值 ---- 复现: 在具体业务场景中,服务启动时初始化(取数据库或redis,或读取配置文件,加载到内存中)了一个全局变量...对于某个具体方法内变量,对每次请求都是独立和隔离(每次请求都相当于一个个cellar,彼此之间不会有干涉和影响), 但对于永久存在内存中全局变量,如果有对其写操作,每次请求都会影响该全局变量....当出现并发请求如用户x和y同时请求接口, 两次请求都会改写全局变量, 这时就很可能出现返回x和y数据错乱 Demo如下: package main import ( "encoding/json

13220

指针变量传值和传址

可以使用指针传递或者引用传递。想要在函数体内改变pRes值,并把这个变化返回到main函数中,必须传递pRes指针。因为pRes本身就是指针,所以应该传递指针指针,或者指针引用。...就是把实参赋值给形参,赋值完毕后实参就和形参没有任何联系,对形参修改就不会影响到实参。 传地址:把实参地址拷贝传递给形参。就是把实参地址复制给形参。...复制完毕后实参地址和形参地址没有任何联系,对实参形参地址修改不会影响到实参, 但是对形参地址所指向对象修改却直接反应在实参中,因为形参指向对象就是形参对象。...无论传值还是传指针,函数都会生成一个临时变量,但传引用时,不会生成临时变量, 传值时,只可以引用值而不可以改变值,但传值引用时,可以改变值, 传指针时,只可以改变指针所指内容,不可以改变指针本身,但传指针引用时...,既可以改变指针所指内容,又可以改变指针本身, 引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本

2.7K40

指针变量传值和传址

可以使用指针传递或者引用传递。想要在函数体内改变pRes值,并把这个变化返回到main函数中,必须传递pRes指针。因为pRes本身就是指针,所以应该传递指针指针,或者指针引用。...就是把实参赋值给形参,赋值完毕后实参就和形参没有任何联系,对形参修改就不会影响到实参。 传地址:把实参地址拷贝传递给形参。就是把实参地址复制给形参。...复制完毕后实参地址和形参地址没有任何联系,对实参形参地址修改不会影响到实参, 但是对形参地址所指向对象修改却直接反应在实参中,因为形参指向对象就是形参对象。...无论传值还是传指针,函数都会生成一个临时变量,但传引用时,不会生成临时变量, 传值时,只可以引用值而不可以改变值,但传值引用时,可以改变值, 传指针时,只可以改变指针所指内容,不可以改变指针本身,但传指针引用时...,既可以改变指针所指内容,又可以改变指针本身, 引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量副本

2K30

C++指向结构体变量指针

C++通过指向结构体变量指针引用结构体变量成员 C++中,一个结构体变量指针就是该变量所占据内存段起始地址指针变量也可以用来指向结构体数组中元素。 ...C++提供了指向结构体变量运算符->,例如: p->num;//表示指针p当前指向结构体变量成员num p->num 和(*  p).num 等价,同样,p->namep->name等价于(*p...++p->n;//得到p指向结构体变量成员n值,并使之加1,然后再使用它。 经典案例:C++指向结构体变量指针。...*point=&stu;//定义point为指向Student类型数据指针变量并指向stu    stu.num=1001;//赋值    stu.sex='M';//赋值    stu.age=21...C++指向结构体变量指针 更多案例可以go公众号:C语言入门到精通

2.8K118

常量指针指针常量详解一样吗_指针是常量还是变量

说一下 常量指针指针常量 区别。 常量指针   指向常量指针,也就是说指针指向对象是常量,指向常量不能修改。指针不是一个常量, 可以把指针指向别一个常量。...常量指针是我们最常用,一般声明形式如下: const int *p; int const *p; 例: int a=1, b=2; const int *p; // 或者是 int const *...不可以对指向内容做修改: *p = 3; // 错误,常量指针不变常量,如果指针指向了某个地址,在解引用后不能去修改指针变量指针常量   指针指向地址不可以改变地址内容可以通过指针改变...不能对指向地址进行修改: p = &b; // 错误,指针指向地址不可以改变地址内容可以通过指针改变 我们也可以这样记 const 在谁前边谁就不可以修改: 常量指针 : const 在指针前边...指针常量 : const 在变量前边,我们就不可以修改指针地址。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

59120

【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 值 | 在函数中 间接修改 指针变量 值 | 在函数中 间接修改 外部变量 原理 )

文章目录 一、直接修改 和 间接修改 指针变量 值 二、在函数中 间接修改 指针变量 值 三、在函数中 间接修改 外部变量 原理 一、直接修改 和 间接修改 指针变量 值 ---- 直接修改 指针变量...值 , 就是为其赋值一个地址值 , 使用 & 取地址符 , 将变量地址赋值给指针变量 , 或者使用 malloc 函数分配内存赋值给 指针变量 ; // 将变量地址赋值给一级指针 p...= &a; 间接修改 指针变量 值 , 首先要 将 指针变量 地址值 , 赋值给 1 个 二级指针 变量 , 通过 * 符号 , 间接修改 一级指针变量值 ; // 将一级指针地址赋值给二级指针...p = &a; // 打印一级指针地址 printf("%d\n", p); // 将一级指针地址赋值给二级指针 p2 = &p; // 间接修改指针值...// 将一级指针地址赋值给二级指针 p2 = &p; // 间接修改指针值 *p2 = 12345678; // 打印一级指针地址 printf("%d\

20.9K10
领券