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

为什么我不能改变我的数组值?但是,如果我将地址指针添加到数组中,它就可以工作

问题:为什么我不能改变我的数组值?但是,如果我将地址指针添加到数组中,它就可以工作。

回答: 数组是一种数据结构,用于存储一系列相同类型的元素。在大多数编程语言中,数组的长度是固定的,一旦创建后,就不能改变数组的大小。这意味着无法直接改变数组中特定位置的值。

然而,如果将地址指针添加到数组中,可以通过操作指针来间接地改变数组的值。指针是一个变量,它存储了一个内存地址。通过操作指针,可以访问和修改该地址处的数据。

当将地址指针添加到数组中时,实际上是将指针的值存储在数组的某个位置上。通过操作指针,可以间接地访问和修改数组中的值。这是因为指针存储了数组元素的内存地址,通过指针可以找到该地址处的数据,并进行修改。

需要注意的是,操作指针需要谨慎,因为错误的指针操作可能导致内存访问错误或其他问题。在使用指针时,应确保指针指向有效的内存地址,并遵循正确的指针操作规则。

总结:

  • 数组的大小是固定的,一旦创建后,无法直接改变数组的大小。
  • 通过将地址指针添加到数组中,可以间接地访问和修改数组的值。
  • 操作指针需要谨慎,确保指针指向有效的内存地址,并遵循正确的指针操作规则。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobile
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C语言】万字速通初阶指针 zero → One

内存单元可以用一个通俗例子来说明 它们之间 到银行去存取款时, 银行工作人员根据我们帐号去找我们存款单, 取款金额。在这里,帐号就是存单指针, 存款数 是存单内容。...因为指针变量是指向一个变量地址,所以一个变量地址 赋值给这个指针就 "指向" 了该变量 例如:变量 i 地址赋值给指针变量 p ,p 就指向 i,其关系如下所示↓ 在程序代码是通过... 变量名 对 内存 单元进行存取操作但是代码经过编译后已经变量名转换为该变量在内存存放地址,对变量值存取都是通过地址进行。...printf("改变:%d\n", *pa);//解引用操作符是可以改变地址原来!...另外,指针变量和一般变量一样,存放在它们之中可以改变,也就是说可以改变它们指向。

1.2K50

【Linux系统编程】环境变量详解

但是呢,问题就来了:为什么我们运行ls这些指令可以直接敲对应指令直接执行,而我们自己生成可执行程序运行要加./呢? 为什么呢? 如果想让我们自己可执行程序也可以不加..../定位方式其实是相对路径,那用绝对路径是不是也可以执行这个可执行文件? 这当然也是可以但是为什么不能像ls哪些基本命令那样无需指明路径直接执行呢?...比如我们把自己写可执行程序路径添加到了PATH环境变量,使得我们运行自己可执行程序时可以像基本命令ls那样无需指定完整路径,直接可以运行。 但是呢?...那bash就会把这个环境变量及其赋值作为一个字符串添加到环境变量表指针数组。...我们也可以用echo 变量名打印它,只是它没有被添加到环境变量表里面,子进程不会继承,获取不了。 但是,你不觉得奇怪吗?

22610

不看技术文,还想不想去腾讯了

通过错误提醒可以知道,自加运算符 ++ 需要一个左,虽然数组名是数组第一个元素地址但是他是不可变,不满足左要求,即不是一个左。...但是指针是一个左,所以我们只需要初始化一个指针数组第一个元素地址,就可以解决这个问题,具体代码如下 ?...如果忘记了可以回顾一下之前文章《真的快学不动了,怎么办?》 “自增自减运算符” 内容。 上面这段代码是不是和 《真的快学不动了,怎么办?》 部分 指针运算 很相似。...但是对于直接用数组形式定义数组,由于数组名虽然和数组第一个元素地址相等,但是并不是一个左,所以只可以数组形式访问数组中元素,不可以使用指针形式访问,除非向上面那样新定义一个指针。...我们指针数组每个元素初始化为一个字符串,这里之所以可以这样写是因为一个指针可以使用 char *p = "sss" 方式进行初始化,所以如果想初始化一个指针数组,就可以通过上面的方式进行。

36820

C++ extern 数组指针

因此查阅了一下相关资料,发现指针数组名是不能混用。 ### 指针数组区别 > 数组名代表了存放该数组那块内存,它是这块内存地址。...**不是数组名这个符号是那块内存地址,而是数组名这个符号本身就代表了首地址这个地址它就是这个地址**。这就是数组名属于符号常量意义所在。...关于这段话理解,觉得引入编译知识比较好理解,数组名是一个符号,和枚举符号一样,有其自身数组就是数组地址。在编译过程,这些符号常亮会被替换为地址符号。...而指针是一个普通变量,变量存放数组地址。虽然数组名和指针可以进行元素访问,但是其本质是有很大区别的!...这是一个正常工作过程,链接出来可执行文件至少在对于该数组引用部分工作得很好。

23900

手把手教玩你转动态内存管理(InsCode Stable Diffusion 美图活动一期)

一、动态内存管理意义 在我们敲代码时候,是否会有着这样想法,为什么创建这个数组arr[10]它就只能存储10个元素呢,它为什么不能在程序运行时跟随我们需要,扩大它对应空间呢?...可能有的小伙伴不是很理解为什么会造成浪费,举个例子,有一个能存放100个整型数组,但我只放了10个元素进去,但计算机它已经把这400个字节空间分配给了这个数组,这400个字节空间在这个数组销毁之前...有联想能力小伙伴恐怕就想到了,那如果写了个循环一直在开辟空间,且通过特殊方式让程序无法结束,那是否会占用计算机大量内存,是的,这可能会使计算机没法正常工作。...a = NULL; //a此时是野指针,安全起见,给它变为空指针 } 后面的空间充足,地址不变 ​ 后面的空间不足,地址改变 ​ 计算机没法给那么大空间 ​ 三、柔性数组...;//打印出来 } free(x);//释放x空间 x = NULL; //指针置为空指针,避免在后面使用 } ​ 3.指针可以替代柔性数组作用 #include #

10110

数据结构和算法之数组(难度级别:初级)

数组是存储在连续内存位置项目的集合。这个想法是多个相同类型项目存储在一起。这使得通过简单地偏移量添加到,即数组第一个元素内存位置(通常由数组名称表示)来更容易地计算每个元素位置。...基是索引 0,两个索引之间差值是偏移量。 为简单起见,我们可以数组视为一组楼梯,其中每一步都放置了一个(假设您一个朋友)。在这里,您可以通过简单地知道他们所走步数来识别任何朋友位置。...数组大小 在 C 语言中,数组具有固定大小,这意味着一旦给定了大小,它就无法更改,即您不能缩小它,也不能扩展它。...原因是为了扩展,如果我们改变大小,我们不能确定(每次都不可能)我们是否可以免费获得下一个内存位置。收缩将不起作用,因为数组在声明时会静态获取内存,因此编译器是唯一销毁它的人。...1.检查堆栈下溢 2.顶部减 1 所以我们正在做是,指向最顶层元素指针是递减,这意味着我们实际上只是限制了我们视图,如果您有任何原始数据类型,则元素停留在那里谈论内存空间,那么它可能没问题,

54121

C - 指针C语言指针总结

如果一个指针变量是NULL,那么去访问这个指针指向变量时候一定会报错。 多个指针指向同一个变量,修改其中一个所有指针指向都会改变。因为多个个指针指向是同一块地址。...指针为什么要分类型? 多级指针 一个指针变量存储是一个一级指针地址,那么它就是二级指针,一个指针变量存储是一个二级指针地址,那么它就是三级指针。...最后1次执行完毕之后,p1指针指向数组外面去了,p1就不再执行数组任何元素了。 注意: 数组名代表数组地址,而数组一旦创建,数组地址就确定了,不能改变。...所以,我们不能数组名赋值也不能修改数组但是可以使用数组。...当我们以字符指针形式要将字符串数据存储到常量区时候,并不是直接字符串存储到常量区,而是先检查常量区是否有相同内容字符串,如果有,直接这个字符串地址拿过来返回,如果没有,才会将这个字符串数据存储到常量区

4.1K81

指针--解决疑惑

/article/37516.htm 好久没有用过C/C++二级指针了,总觉它就指针指针,没什么大不了但是今天看到一道面试题,感觉自己对二级指针理解还是不够深刻。...但是只是形参指向改变了,实参str仍然指向NULL,并没有改变。因此,程序达不到题目的要求,而且运行时会出现错误,由于str一直指向NULL,执行strcop时,会出现错误,提示某某内存不能写入。...而调用GetMemory函数时,传递是str地址,p是一个二级指针,*p是一个指针。因此,str地址赋给临时变量p,则*p就是指针str改变*p就相当于改变str。...,因为一般数组声明时,不允许下标是变量,所以如果想动态决定数组各维大小,最好这样做。...只是把第一个链表地址赋值给了pp,,但是并没有改变*p指向 下面的pp->pNext = last;只是给pp赋了新 就如同 #include"stdio.h" #include"stdlib.h

64770

看完还不会指针,锤自己!

指针介绍 在程序,我们声明一个变量(int a = 1),数据1存到变量a,计算机内部会将这个数据存到内存(RAM),那么,数据存到某个地方,就会涉及地址。...是的,可以,这个变量就是指针指针它就是存储另一个变量内存地址一种数据类型,即指针内容就是另一个变量内存地址。...,但是数组内容换一下就不会是一样了,如果是改成(*p) + 1,那么就是(*p) + 1 = a[0] + 1 = 2,同理可以改成p+2、p+3.........前面有讲到,指针也是一种数据类型,是一种变量,也有自己地址,所以既然有地址,而指针就是存放另一个变量地址呀,那为什么不能再用一个指针存放这个指针地址呢,对吧!...数组指针指针在后,说明它就是个指针,所以数组指针指向数组,相当于一次声明了一个指针。从前面就已经知道,二维数组a[3][2],a实质上就是一个数组指针

20630

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

: 从内存窗口我们可以看到: 对于char*类型指针p1,在通过解引用地址存储改为0时,p1改变了1个字节内容;对于short*类型指针p2,在通过解引用地址存储改为0时,p2改变了...2个字节内容;对于int*类型指针p3,在通过解引用地址存储改为0时,p3改变了4个字节内容;对于long long*类型指针p4,在通过解引用地址存储改为0时,p4改变了8个字节内容...12.3 const修饰指针变量 为了能够在拿到变量地址后也无法修改变,我们可以通过const对指针进行修饰。但是应该如何修饰呢?...p,即无法对指针p指向对象进行修改,但是可以对*p存储内容进行修改; 12.3 const修饰指针变量 为了能够在拿到变量地址后也无法修改变,我们可以通过const对指针进行修饰。...我们常量值存放在数组时,计算机就会通过常量地址找到对应常量,并将该存放在数组对应元素地址下,所以此时我们是可以修改数组元素存放但是对于常量字符串来说,我们将其用字符指针指向时,是指向常量字符串自己本身地址

22610

程序员C语言快速上手——基础篇(五)

网上存在很多错误言论和资料,一定要明确,在C语言中,数组不存在传递,这也是为什么不能对做函数参数数组使用sizeof运算原因所在,因为它会自动退化为指针。...counter函数为一个计数函数,每次调用都将传入加10,可是为什么在函数外部打印t,它没有发生改变呢?...什么是指针 在回答什么是指针之前,认为应当先提问为什么需要指针如果没有明确应当重视理由,大家何必花大力气学习它呢?...这样说比较绕,换个说法,如果直接一个内存地址对应内存中保存取出来,这就叫直接寻址,如果是对保存地址变量使用,这就是间接寻址。使用间接寻址运算符过程被称为解引用。 ?...图示 注意,指针变量应当是一个地址,而不能是其他。因此给指针变量赋值时,先使用取地址符&求得变量地址,然后才这个地址赋给指针变量,这个过程称为指针指向某某变量。

90020

彻底搞定C语言指针(精华版)

, *pa ); pa++ ;  //注意这里,指针被修改 } 可以看出,这段代码也是数组各元素输出。...数组名是指针常量,其不能修改,因此不能类似这样操作:a++.前面4,5节pa[i],*(pa+i )处,指针pa是使终没有改变。所以变量指针pa与数组名a可以互换。 4....即它可以重新指向另一个地址但是不能通过*pi来修改i2。 这个规则符合我们前面所讲逻辑吗?当然符合了! 首先const  修饰是整个*pi(注意,是*pi而不是pi)。...pi为6,它就是I变量内 存起始地址。...所以对形参变量pa(当然 是一个地址修改并不会改变实参变量p,因此p并没有改变(即p指向并没有被改变)。 (如果还有疑问,再看一看《第五篇:函数参数传递》了。)

94130

C语言基础知识入门(大全)「建议收藏」

十、常量 在程序执行过程不发生改变量称为常量。 mtianyan: C语言常量可以分为直接常量和符号常量。...由于C语言是没有检查数组长度改变或者数组越界这个机制,可能会在编辑器编译并通过,但是结果就不能肯定了,因此还是不要越界或者改变数组长度 3.数组作为函数参数 数组可以由整个数组当作函数参数,也可以数组某个元素当作函数参数...因此,如果能更好地理解内存模型,以及 C 如何管理内存,就能对程序工作原理洞若观火,从而使编程能力更上一层楼。 大家真的别认为这是空话,大一整年都不敢用 C 写上千行程序也很抗拒写 C。...上面说,定义一个变量实际就是向计算机申请了一块内存来存放。 那如果我们要想知道变量到底放在哪了呢?可以通过运算符&来取得变量实际地址,这个就是变量所占内存块起始地址。...在这里想谈几个看起来有点无聊的话题: 为什么我们需要指针?直接用变量名不行吗? 当然可以但是变量名是有局限。 变量名本质是什么?

1.7K41

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

如果是C,我们可以用%p来输出变量地址,若是C++,我们可以用static_cast(&a)来输出变量地址,大家若是使用vs,教大家一个小技巧,在调试模式(F5)下依次单击调试,窗口,...由于我们main函数不被其他函数调用(注意:不是不可调用,是一般情况下不调用,如果你想挨骂的话…),所以就不能像其他函数一样,在程序运行获取参数数据,那为什么还要有这个参数呢,实际上,这个参数是程序运行时...其实相当于是调用了exe,exe里面的函数利用参数工作,而exe也同样可以利用参数工作,那么如何输入参数呢,告诉大家几张方法: 1.直接在命令行输入 start 路径 参数1 参数2 参数3 2.我们编译好程序...查找了大量有关博文,大多数有关博文都有怎么一张图,如果说以前,可能会同意,但是现在对图中栈区向下增长有一些疑惑,就拿我们刚开始数组死循环内存分配来说,内存两种分配模式,递增,递减,所以我觉得这个图还有待考证...获取函数地址,fun_2 是一个函数名, 调用的话 使用(*fun)() 和fun() 效果是一样 char * p[];              指针(样式)数组 本质是数组指针进行集合

65941

C语言中函数基本知识

3:调用结束后,系统给他分配内存单元立即被释放,而主调函数不会改变 4:主调函数传递给被调用函数值后,被调用函数里面可以直接用该但是要记住,数据类型要和参数数据类型一一对应。...n但是却没有改变,就是因为仅仅只是把 n = 46 这个给拷贝一份给了 exch() 函数,在此时exch()函数,它里面的n就有了 46这个 : 对于第四点: 在数据传递时候...常量是不能被更改量。 2:如果你要在函数,要改变主调函数某变量,那么就要把地址传递给形参, 如果不需要改变,直接传递拷贝即可。...根据要注意点中,第二个要点,想在被动用函数中就改变主调函数参数,那么就需要把地址传递进去,也就是进行址传递,那么函数定义就需要借助指针为什么会如此呢?...因为把变量地址给传递进去了后,形参指针变量对地址进行操作,就会影响该内存空间,进而反映到主调函数中去,也就是发生了改变

77720

【C语言】⒉万字带你玩转高阶指针『0»1』

*str 是不能改变字符串当中,最终程序会"挂掉"。 arr 数组可以改变字符串当中。 用调试当中监视可以证明上述例子!...重点核心:常量字符串是不能改变,在内存当中地址也是一样不能改变。 ---- 指针数组  一个数组元素指针则是指针数组指针数组是一组有序指针集合。...Ⅱ:大于或等于分界数据集中到数组右边,小于分界数据集中到数组左边。此时,左边部分各元素都小于或等于分界,而右边部分各元素都大于或等于分界。...本道题目有两点我们需要注意下↓ 指针实现两个交换。 不能创建临时变脸来进行交换。 这里来说下,为什么要用指针变量进行交换。...也就相当于是取地址p赋值给指针变量p1。如果你觉得这句话对你来说不怎么理解的话,那么多看几遍还是可以理解

50310

C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案

答案: c++指针是一个很经典用法,但是也是最容易出错,比如定义了一个指针,必须对其进行初始化,不然这个指针指向是一个未知内存地址,后续对其操作时候,会报错。...一.c++指针初始化一般方法: 1.一个已经在内存存在变量地址传递给定义指针,这个指针就指向这个变量内存地址(相同数据类型),完成初始化。...delete释放其实只是释放了申请这块内存空间,但是指针并没有没撤销,指针还是指向这块地址但是不可用(靠人品吃饭有可能可以用),是非法。...void function()const;//常成员函数,常成员函数是不能改变成员变量值函数。 错题解析:只要一听到被面试者说:“const意味着常数”,就知道正在和一个业余者打交道。...2)有些编译器可以对const常量进行调试,不能对宏调试。 15、头文件ifndef/define/endif干什么用? 正确答案: 防止重复定义 16、C++为什么用模板类。

1.7K20

导入:什么是数据结构,为什么要学习数据结构,约瑟夫环数组实现

我们不知道怎么造轮子,但是我们起码要知道轮子为什么是圆。在读这篇文章你估计在想,为什么会有数据结构这门课,为什么要学数据结构?...现在解释你们也不会听进去,简短说一句,如果你是想考研,数据结构必考,如果你想去好一点公司,数据结构必考,所以以后你也不用再纠结为什么要学数据结构,数据结构有什么用,学就对了。...C语言复习 l 指针     C语言指针可以用于:函数地址调用、动态分配内存、数组地址引用 代码示例: #include  void main() {      int x ,...*/ l 指针数组 数组是同类型变量集合,各元素按下标的特定顺序占据一段连续内存,各元素地址也连续,指针数组元素引用非常方便 通过指针引用数组元素可以分为以下三个步骤: (1)说明指针数组...: (1) 传(参数为整型、字符型等) 把实参传给函数局部工作区相应副本,函数使用这个副本执行必要功能,函数修改是副本,实参不变 代码示例: #include <iostream.h

95650

手把手教你深入理解cc++指针

然而对于大多数初学者,面对指针这个概念简直是望而生畏,如果前期指针运用不熟练,后期编写程序随时都有可能成为一颗定时炸弹,因此今天就花点时间给大家解释一下自己对c/c++中指针理解。...a地址,也就是2000,当我们想通过p来操纵a的话,首先要根据p保存地址找到它指向内容,也就是解引用*p,当*p内容放生改变时候,首地址为2000内存单元存储也会做出改变,因此变量当*p...指针常量 指向不可修改,指向可修改 四,指针数组 我们知道,一维数组名本身就是一个指针但是在使用过程要小心,因为这个指针分为指向数组首元素指针与指向整个数组指针,那么如何区分它们呢...(arr) / sizeof(int); } 上面这行代码语法上没有问题,但是得出结果却不是我们想要结果,为什么呢,这是因为数组名作为函数传递时候,会退化成一个指针如果是二维数组的话,会退化成指向一维数组指针...好了,关于c/c++指针就先讲述到这里,希望这篇文章对你理解指针有帮助,后面还会持续更新。更多精彩文章可以扫描下面的二维码关注,感谢大家支持!

45631

C++面试知识总结

引用一旦被初始化为指向一个对象,它就不能改变为另一个对象引用。 指针在任何时候都可以改变为指向另一个对象。 引用创建和销毁并不会调用类拷贝构造函数。...因为不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能改变为另一个对象引用,所以比指针安全。由于const 指针仍然存在空指针,并且有可能产生野指针,所以还是不安全。...指针常量不能修改指针所指向地址,一旦初始化,地址就固定了,不能对它进行移动操作。但是指针常量内容是可以改变。 2.16 指针函数和函数指针区别 指针函数:返回指针函数。...结构类型操作数sizeof是这种类型对象总字节数。 如果操作数是函数数组形参或函数类型形参,sizeof给出其指针大小。...对指针来说,可以指定指针本身为const,也可以指定指针所指数据为const,或二者同时指定为const。 在一个函数声明,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变

1.7K41
领券