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

为什么我不能使用间接操作符解引用一个指向数组元素的对象的指针?

间接操作符(*)用于解引用指针,即访问指针所指向的内存地址处的值。对于指向数组元素的对象的指针,我们可以使用间接操作符解引用指针来访问数组元素的值。

然而,不能使用间接操作符解引用一个指向数组元素的对象的指针的原因是,数组元素是连续存储在内存中的,指针只能指向数组的首个元素。当我们使用指针访问数组元素时,指针会根据元素的类型和偏移量来计算要访问的元素的内存地址。

如果我们有一个指向数组元素的对象的指针,我们可以通过指针加上偏移量来访问其他元素。例如,如果我们有一个指向int类型数组元素的指针p,并且我们想要访问数组的第二个元素,我们可以使用p + 1来计算第二个元素的内存地址。

因此,使用间接操作符解引用指向数组元素的对象的指针是没有意义的,因为它只能访问指针所指向的单个元素,而无法访问整个数组。

总结起来,不能使用间接操作符解引用一个指向数组元素的对象的指针是因为数组元素是连续存储在内存中的,指针只能指向数组的首个元素,无法访问整个数组。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

熬夜整理万字CC++总结(二),值得收藏

要使一个指针为NULL,可以给它赋值一个零值。为了测试一个指针百年来那个是否为NULL,你可以将它与零值进行比较。 对指针引用操作可以获得它所指向值。...但从定义上看,NULL指针并未指向任何东西,因为对一个NULL指针引用一个非法操作,在引用之前,必须确保它不是一个NULL指针。 如果对一个NULL指针间接访问会发生什么呢?...p= p+1意思是,让p指向原来指向内存块一个相邻相同类型内存块。在数组中相邻内存就是相邻下标元素。...1.1.3 间接访问操作符 通过一个指针访问它所指向地址过程叫做间接访问,或者叫引用指针,这个用于执行间接访问操作符是*。...注意:对一个int类型指针引用会产生一个整型值,类似地,对一个float指针引用会产生了一个float类型值。

1.2K20

计算机初级选手成长历程——指针(6)

,下面我们来对这一块内容做个总结: 字符指针指向常量字符串时需要使用const进行修饰; 常量字符串相当于一个不可被修改字符数组,字符串元素下标是从0开始依次递增; 我们可以通过下标引用操作符对常量字符串中元素进行访问...下面大家可以根据这个观点回答以下两个问题吗: 为什么数组名与指针等价? 为什么引用操作符与下标引用操作符等价? 为什么数组名与指针等价?...因为数组名存放是地址,而存放地址变量,我们将其称之为指针为什么引用操作符与下标引用操作符等价?...在这个代码中此时数组指针p元素下标为0,我们可以通过下标引用操作符找到对应空间中存放信息——变量a地址: 在找到变量a地址后,我们可以通过对其引用来找到a中存放数据: 因为引用操作符和下标引用操作符是等价...为了进一步验证这个结论,我们来进行以下测试; 通过数组下标访问数组各个元素 此时我们通过两次引用不管是使用数组名还是指针名都成功访问到了数组各每个元素; 通过引用操作访问二维数组各个元素 通过引用操作

13910
  • 计算机初级选手成长历程——指针(4)

    通过数组来接收指针传参也是没有任何问题,这里我们看到数组在接收完后,还能通过引用操作符来访问指针指向各个对象; 经过上面的例子,相信大家对指针数组名之间相互转换已经非常熟悉了,下面给大家介绍一些关于指针数组之间有趣变形...下面我们就来探讨一下; 9.4 指针数组相互转换 为了探讨指针数组名能否进行相互转换,下面我们先进行第一个测试: 使用*(数组名+下标)来访问数组元素; 可以看到,此时对数组名进行引用操作也是可以像指针一样找到数组各个元素...通过数组来接收指针传参也是没有任何问题,这里我们看到数组在接收完后,还能通过引用操作符来访问指针指向各个对象; 经过上面的例子,相信大家对指针数组名之间相互转换已经非常熟悉了,下面给大家介绍一些关于指针数组之间有趣变形...; &指针[下标] 当我们对指针使用下标引用操作符时,就等价于对指针进行引用,再进行引用后再对其取地址,还能得到指针; *数组名 我们可以通过对数组名进行引用来访问数组各个元素,但是,数组名并不能指针一样进行自增操作...如下所示: 在前面对指针数组探讨中我们得到结论是在对数组元素进行访问时引用操作符*下标引用操作符[]。因此我们可以通过第二个下标引用操作符来访问指针数组中各元素数组元素

    12300

    深入解析C语言数组指针(0)

    间接访问操作符 通过一个指针访问它所指地址过程称为间接访问或引用指针操作符为*。根据前面的声明我们有: ?   我们可以知道,d值为100。...对于一个NULL指针进行引用是非法,因为它并未指向任何东西。如果你知道指针将被初始化为什么地址,就把它初始化为该地址,否则就把它初始化为NULL。...第二行中,首先执行是函数调用操作符(),因为它优先级高于间接访问操作符。因此f是一个函数,它返回值类型是一个指向整型指针。   ...第二行是非法不能用赋值符把一个数组所有元素赋值到另一个数组,必须使用一个循环,每次赋值一个元素。...对数组某个元素执行间接访问操作后,得到一个整型,所以api元素类型为指向整型指针

    1.3K30

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

    *理解,是理解成钥匙孔,在介绍&和*这两个操作符时,有提到过,取地址操作符就相当于是取出门牌号,而引用操作符就是门钥匙,那现在我们从指针数据类型就可以知道了为什么是*而不是#甚至是其它符号...通过数组来接收指针传参也是没有任何问题,这里我们看到数组在接收完后,还能通过引用操作符来访问指针指向各个对象; 经过上面的例子,相信大家对指针数组名之间相互转换已经非常熟悉了,下面给大家介绍一些关于指针数组之间有趣变形...; &指针[下标] 当我们对指针使用下标引用操作符时,就等价于对指针进行引用,再进行引用后再对其取地址,还能得到指针; *数组名 我们可以通过对数组名进行引用来访问数组各个元素,但是,数组名并不能指针一样进行自增操作...下面大家可以根据这个观点回答以下两个问题吗: 为什么数组名与指针等价? 为什么引用操作符与下标引用操作符等价? 为什么数组名与指针等价?...因为数组名存放是地址,而存放地址变量,我们将其称之为指针为什么引用操作符与下标引用操作符等价?

    32710

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

    printf("无改变:%d\n", *pa); *pa = 30;//进行引用操作符 *pa 就是通过引用(pa)里边地址来找到地址a值。...printf("改变:%d\n", *pa);//引用操作符是可以改变取地址原来!...引用一次就可以访问④个字节。按照上面图中就可以把④个字节全部变成0了。 然而,如果一个字符指针(char*)的话。引用一次就只能访问其中①个字节。...标准规定 允许指向数组元素指针指向数组最后一个元素那个内存位置指针进行比较,但是不允许指向一个元素之前那个内存位置指针去进行比较,第二种就会导致数组越界。...第一个 printf() 语句中,arr[i] 表示获取第 i 个元素值,该元素一个指针,还需要在前面增加一个 *(引用) 才能取得它指向数据,也即 *arr[i] 形式。

    1.2K50

    未禾C语言总结

    a++;//后置++,先使用,在++         ‘&’取地址操作符,单目操作符,与按位与操作符区分         ‘*’引用操作符间接引用操作符           ...如:     void *p = NULL;//可以指向任何类型指针,未知指向变量数据类型,不能进行间接寻址运算     int *p = NULL;//不指向任何对象     int *p...= 0;     int a = 1;     char *p = &a;//指向变量a地址 间接寻址运算(运算符*,&)     *:引用操作符,访问指针p所指变量a。     ...常量指针指向常量数据:          void sum(const char const * p,int n)//权限最小,指针(地址)不能改变,其指向数据也不能改变 指针数组:是一个数组,...先是是一个指针,再指向具有10个元素数组数组元素为int。

    50410

    C语言:深入理解指针(1)

    2.2 指针变量和解引用操作符 2.2.1 指针变量        通过2.1我们通过&取地址符拿到了地址,这个地址是一个数值,而将这个数值存储起来方便后期使用,就需要我们把地址值存在指针变量里。...p中,指针变量本身也是一种变量,只不过是专门用来存放地址,int*中*相当于说明该变量是一个指针变量,而int对应是该变量指向对象数据类型是整形,如果要创建一个存放char类型变量a指针变量,...,那未来我们也要有方法去取用他,就跟我们生活中我们找到一个房间,我们希望可以在这个房间里存放或者取走物品,同理,我们通过了指针变量存储地址,通过地址找到了该地址指向空间,这里就需要用到引用操作符*...这说明了指针类型决定了对指针引用权限有多大(就是一次能操作几个字节),比如int*类型指针引用能访问4个字节,但是char *类型指针引用只能访问1个字节。...四、const修饰变量    4.1 const修饰指针         变量是可以修改,如果将变量地址交给一个指针变量,那么通过指针变量也是可以间接修改这个变量,如果我们希望这变量不能被修改,就可以使用

    12610

    【C语言】深入理解指针1

    ✔这⾥pa左边写是 int* , *是在说明pa是指针变量,⽽前⾯ int 是在说明pa指向是整型(int) 类型对象。...除了int*以外还有char*,double*... ④引用操作符(*) 前面①点我们了解了取地址(&)操作符,现在我们来学习引用操作符。 我们将地址保存起来,未来是要使⽤,那怎么使⽤呢?...C语⾔中其实也是⼀样,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针指向对象,这⾥必须学习⼀个操作符引⽤操作符(*)。...no 指针指向内容不能通过指针来改变  p = &m; //ok?       ...(3)指针关系运算 标准规定:允许指向数组元素指针指向数组最后一个元素一个内存位置指针进行比较,不允许指向数组元素指针指向数组一个元素一个内存位置指针进行比较。

    7110

    【C】初阶指针

    指针大小在32位平台是4个字节,在64位平台是8个字节 引用操作符 上面的代码,如果我们想通过pa间接改变a值,那么就需要用到引用操作符了 如下: #include int...,向内存申请了空间存放了a地址 /*char* pc = ch;*///pa类型是int*,a指向变量是int型,*告诉我们pa是指针变量 *pa = 20;//引用操作符间接访问操作符)...比如: char* 指针引用就只能访问一个字节,而 int* 指针引用就能访问四个字节。 那指针类型该如何使用呢?...标准规定: 允许指向数组元素指针指向数组最后一个元素后面的那个内存位置指针比较,但是不允许与指向一个元素之前那个内存位置指针进行比较。 5....,引用之后是取arr1~arr4中某个数组,再加j后引用是取到下标为j元素, } printf("\n"); } return 0; } 结语: 这里我们关于初阶指针内容就介绍完了

    13230

    轻松拿捏C语言——【保姆级·指针讲解】期末C语言<指针>急救包,全是干货,诚意满满!

    内存单元编号==地址==指针 二、指针变量 、取地址操作符&和解引用操作符* int a = 10; 这里创建了一个整型变量a,占四个字节,所以就会向内存申请四个字节大小连续空间...int*中*说明b是指针变量,int说明b指向对象是整型(即b中存储这个地址对应变量a是整型) 通过引用操作符*,我们可以改变指针变量指向内容 int a = 10;...通过引用操作符没有直接修改变量a,而是通过地址来间接修改 另外指针变量大小与它类型没有关系,在32位平台下(32个比特位),指针变量大小是4个字节;在64位平台下指针变量是8个字节。...三、指针变量类型意义 1.指针变量类型不同决定了在引用时候能访问字节数不同 例如,char*类型指针引用时只能访问一个字节,而int*类型指针引用能访问四个字节 int n = 0x11223344...3.void*指针 void*是一种特殊指针类型,也叫泛型指针(或无具体类型指针) 优点:可以接收任何类型指针 缺点:不能进行 指针+-整数运算,不能进行 引用操作 四、const修饰指针

    9610

    C语言——I 深入理解指针(一)

    3、引用操作符 只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针指向对象,这里必须学习⼀个操作符引用操作符(*)。...结论:指针类型决定了,对指针引用时候有多大权限(一次能操作几个字节)。...总结:指针类型决定了,对指针引用时候有多大权限(一次能操作几个字节),决定了指针向前或者向后走一步有多大(距离), void* 类型指针不能直接进行指针 + - 整数和解引用运算,但能接受任意类型地址...五、指针运算 指针基本运算有三种,分别是: • 指针 + - 整数 • 指针 - 指针指针关系运算 1、指针 + - 整数 因为数组在内存中是连续存放,只要知道第⼀个元素地址,顺藤摸瓜就能找到后面的所有元素...+整数跳过一个整型变量 } return 0; } 2、指针 - 指针 得到绝对值是指针指针之间元素个数,其运算条件:两个指针指向同一空间。

    10510

    计算机初级选手成长历程——指针(1)

    1024; 程序猿可以通过取地址操作符&将操作对象地址取出来; 程序猿可以通过引用操作符*将地址中存放值取出来; PS:上述知识点在数组、函数栈帧创建与销毁以及操作符篇章中都有详细介绍; 【数组篇章...\理解,是理解成钥匙孔,在介绍&和\这两个操作符时,有提到过,取地址操作符就相当于是取出门牌号,而引用操作符就是门钥匙,那现在我们从指针数据类型就可以知道了为什么是*而不是#甚至是其它符号...,既然是变量,那我在创建时,如果未给变量进行初始化,那么就会导致此时指针变量指向一个随机地址,那如果要对这个随机地址进行引用并对地址中内容进行修改,那会出现什么情况呢?...: 当指针指向main函数栈帧中空间时,你并不能确定它指向是哪一块空间,也就是说,指针p此时可能指向已经被使用地址,那此时对这个空间值进行修改,是不是有可能导致代码不能正常运行呢?...4.4 指针越界访问 当我们正常指针初始化后,也可能出现野指针情况,如下所示: 在这个代码中,对于数组arr来说,它空间内只有3个元素,我们通过数组名将数组元素地址赋值给变量p后,变量p在进行对地址内容修改时

    14310

    C语言指针初始化和赋值

    对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边表达式类型应该是相同,如果不是,赋值操作符将试图把右边表达式值转换为左边类型。...要注意是:对于一个不确定要指向何种类型指针,在定义它之后最好把它初始化为NULL,并在引用这个指针时对它进行检验,防止引用指针。...void *型指针作为一种通用指针,可以和其它任何类型指针(函数指针除外)相互转化而不需要类型强制转换,但不能对它进行引用及下标操作。...6、指向指针指针指针初始化第5种方式中提到了用一个指针地址来初始化一个指针。回忆一下上一讲内容:指针是一种变量,它也有自己地址,所以它本身也是可用指针指向对象。...对ppi引用照常会得到ppi所指对象,所获得对象指向int型变量指针pi。想要真正地访问到i.

    2.5K10

    CC++开发基础——指针引用

    }; b.指针具体使用 (1)指针赋值 对指针变量使用操作符"="会改变指针指向,所以,对指针采取赋值操作可以理解为指针方向重定向。...因为"*"是通过内存地址来间接获取变量值,所以称为间接运算符,通常也称它为引用运算符。 符号"*"有时候是用来声明指针,有时候是用来引用。...const char* char_ptr {"Hello"}; 注意,指向数值类型指针必须引用,才能拿到指针指向元素值。...但是指向char类型指针,可以不经过引用,直接利用指针名获得元素值。有时候,为了让代码更清晰,也会对char类型指针引用操作。...a.指向数组指针指针指向数组一个元素

    17820

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

    指针是c语言为什么如此流行一个重要原因,正是有了指针存在,才使得c/c++能够可以比使用其他语言编写出更为紧凑和有效程序,可以说,没有掌握指针,就没有权利说自己会用c/c++.然而。...由此扩展到二级指针,如果我们再定义一个指针变量q来指向p,那么q就是一个二级指针,因为它指向对象还是一个指针,只不过比他自己低一级,是一级指针,那么二级指针如何定义呢,请看下面的代码: int a...指针常量 指向不可修改,指向值可修改 四,指针数组 我们知道,一维数组名本身就是一个指针,但是在使用过程中要小心,因为这个指针分为指向数组元素指针指向整个数组指针,那么如何区分它们呢...但是要注意,当用sizeof操作符操作arr时候,这个时候不能把arr当做一个指针来对待,因为sizeof操作数组时候它返回数组字节长度,而单个指针变量只占用四个字节。...但是我们不能通过下面方式去访问数组元素: cout << *arr++ << endl; //报错 这是因为arr本身是一个指针常量,指针指向不可更改,因此编译器直接报错。

    49031

    指针(从零到一)【纯干货】【长期更新】

    一、指针是什么 定义:在计算机科学中,指针( Pointer )是编语言中一个对象,利用地址,它值直接指向( points to )存在电脑存储器中另一个地方值。...我们发现不管是什么类型指针,既然都是四个字节大小,那么能不能一个通用指针呢,为什么还要区分出各种类型指针呢,答案当然是否定。...= 0; return 0; } ​​​​​​ 由此可以看出指针类型意义: 1.指针类型决定了,指针引用权限有多大(int类型指针引用可以访问四个字节、char类型指针引用可以访问一个字节...a原先值 return 0; } 如何避免野指针 1.指针初始化(不知道指针应该初始化为什么时,直接初始化为NULL) 2.小心指针越界 3.指针指向空间释放即使置NULL 4.指针使用之前检查有效性...四、指针运算 指针运算包括:1.指针+-整数;2.指针-指针;3.指针关系运算 两个指针相减前提:两个指针指向一个空间 指针-指针得到两个指针之间元素个数,证明如下代码: 在了解完指针相减知识点后

    10810

    【编程基础】C语言指针初始化和赋值

    此时,*p只是表示定义是个指针变量,并没有间接取值意思。...对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边表达式类型应该是相同,如果不是,赋值操作符将试图把右边表达式值转换为左边类型。...要注意是:对于一个不确定要指向何种类型指针,在定义它之后最好把它初始化为NULL,并在引用这个指针时对它进行检验,防止引用指针。...void *型指针作为一种通用指针,可以和其它任何类型指针(函数指针除外)相互转化而不需要类型强制转换,但不能对它进行引用及下标操作。...i地址为108,pi内容就是i地址,而pi地址为104,ppi内容即是pi地址。对ppi引用照常会得到ppi所指对象,所获得对象指向int型变量指针pi。想要真正地访问到i.

    2.7K80

    C++中指针引用区别

    虽然使用引用指针都可以间接访问另一个值,但他们之间有两个重要区别: 引用总是指向某个对象,定义引用没有初始化是错误。...★条款一:指针引用区别   指针引用看上去完全不同(指针操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同功能。指针引用都是让你间接引用其他对象。...你如何决定在什么时候使用指针,在什么时候使用引用呢?   首先,要认识到在任何情况下都不能指向空值引用一个引用必须总是指向 某些对象。...如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。 还有一种情况,就是当你重载某个操作符时,你应该使用引用。最普通例子是操作符[]。...,它就不能指向其他对象.这就是为什么它要被初始化原因。

    4.9K82
    领券