首页
学习
活动
专区
工具
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中的指针呢?为什么我不能从数组中得到正确的值?为什么我的map函数不能在数组中工作?为什么我的if else可以工作,但是当我用一个函数替换它时,它就不能工作了?我想知道为什么我的XML URL提要数据不能在前端显示为HTML。如果我把静态XML放在我的目录中,它就能工作我正在将一个对象转换成这个数组,但是不能得到预期的数组,它将由数组中的键和值组成,我哪里错了?为什么foreach在我的highchart中不能工作,当我拆分数组时它能工作?当我通过URL传递令牌时,为什么我不能授权自己,但是当我把它放在键/值部分的头中时,它就可以工作了?为什么我不能通过set State更新react js中数组中特定索引的值?使用C从文件中读取整数以将其添加到数组中。但是,当我尝试打印数组时,我得到的是打印地址为什么我的计数器不计数,并且我的ArrayList没有将新的整数值添加到数组中?为什么我的while循环可以在主文件中工作,但如果我试图从一个单独的文件中包含它,为什么不能呢?通过id定位数组中的对象,并根据变量参数更改其值:为什么我的代码可以工作?在我的示例(blazor)中,为什么绑定不能与数组和for循环一起工作?如果我将数组中的一个索引的值设置为null,它会从数组中删除该索引吗?我是否可以将where子句添加到cypher中的匹配中,并按数组的关系属性进行过滤?我可以将文本数据加载到.js文件中的javascript数组中,但不能加载到html中。我的摩尔斯电码程序不能在二维数组中工作,有其他方法可以做到吗?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言(指针)2

*paa该为0,可以看到内存也发生了相应改变。...我们也可以用例子证明这句话: 前面的文章我们说过,创建数组时候数组长度只能为大于0整型常量或整型常量表达式,不能包含变量。...因为上篇文章我们刚了解了一点指针,知道通过指针解引用操作可以间接地去找到、操作一些,那这里能不能创建一个指针变量pa,变量a地址存到pa,再解引用pa来实现间接改变a呢?...上面代码改变pa事实上是改变指针变量pa指向,也就是此时指针变量pa里面存是变量b地址。...还有,当 “ * ” 左边和右边都有const修饰时候,*pa和pa都具有常量属性,都不能改变如果觉得文章还不错,请点赞、收藏 + 关注支持一下,我会持续更新更好文章。

9010

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

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

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

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

    27810

    深入理解并打败C语言难关之一————指针(2)

    指针就是指针指向位置是不确定,下面来看看常见指针出现成因 1.2野指针出现几种原因   1.2.1指针并没有初始化 这个很好解释,我们每次设置指针变量时候,指针指向地址是有的,但是如果我们并没有指定它指向地址具体是什么...,当我们出函数时候会让形参释放(销毁),所以吗,在我们传调用时候,在交换后形式参数已经被销毁了,所以形式参数改变不会影响到实际参数,可能有的人会说,为什么不在函数内部打印呢?...因为我们在这里想要做到是完全交换,意是在出函数时候,我们也可以做到两个数是完全改变,所以来说,在这个时候,我们主角,传址调用它就来了,若想完全做到交换,让地址交换,那么内容也随之变换,具体代码如下...,两个数值完美的发生了改变,所以,传址调⽤,可以让函数和主调函数之间建立真正联系,在函数内部可以修改主调函数变量;所 以未来函数只是需要主调函数变量值来实现计算,就可以采⽤传调⽤。...如果函数内部要修改 主调函数变量,就需要传址调用。

    8310

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

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

    38320

    C++ extern 数组指针

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

    43100

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

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

    13510

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

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

    55821

    C - 指针C语言指针总结

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

    4.2K81

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

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

    21930

    指针--解决疑惑

    /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

    67070

    初识C语言·指针(1)

    哦吼,一样。 那现在就好玩了,我们知道了a地址,也就是我们有了任意访问a权限,也就是说我们可以通过地址改变a,来试试。...那么就更好玩了,不仅可以访问,可以有选择访问。...*pa,会导致a无法被改变,也即是指针变量指向元素为定,const在*后面,修饰是pa,会导致pa存地址无法被改变,也就是指针变量无法被修改。...,数组名就是首元素地址,首元素地址加上数组元素个数,指向了\0,令p是首元素地址,然后就是比较咯,这个相信是很容易理解,就不多介绍了。...反正没有给它地址,就随便存咯,跟深海鱼一样,反正没有人看到,随便长咯。 看吧,如果不初始化,指针变量是个随机,且指向位置不确定,是比较危险

    5210

    【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对指针进行修饰。...我们常量值存放在数组时,计算机就会通过常量地址找到对应常量,并将该存放在数组对应元素地址下,所以此时我们是可以修改数组元素存放但是对于常量字符串来说,我们将其用字符指针指向时,是指向常量字符串自己本身地址

    34310

    C:指针学习(1)-学习笔记

    但是如果我们不修改变,直接使用是否可以?...这就像现实生活这里有一个房子,你不能翻窗户进去,只能从正门进去,但是某一天呢,有事不在家,就把房门锁上了,你无法从正门进去了,于是你把窗户砸了,从窗户爬进去了。...1.3 总结: const如果放在*左边,修饰指针指向内容,保证指针指向内容不能通过指针改变但是指针变量本身内容可变。...const如果放在*右边,修饰指针变量本身,保证了指针变量内容不能修改,但是指针指 向内容,可以通过指针改变。...2.赋值:可以变量地址赋值给指针,比如 *p = &n;表示n地址赋给p,从而改变指针p所指向

    8810

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

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

    92820

    彻底搞定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指向并没有被改变)。 (如果还有疑问,再看一看《第五篇:函数参数传递》了。)

    96230

    关于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[];              指针(样式)数组 本质是数组指针进行集合

    67541

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

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

    2.6K42

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

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

    56810

    C语言中函数基本知识

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

    87620
    领券