首页
学习
活动
专区
工具
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中存放数据: 因为引用操作符和下标引用操作符是等价...为了进一步验证这个结论,我们来进行以下测试; 通过数组下标访问数组各个元素 此时我们通过两次引用不管是使用数组名还是指针名都成功访问到了数组各每个元素; 通过引用操作访问二维数组各个元素 通过引用操作

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

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

    12900

    【c语言】指针就该这么学(1)

    3.引用操作符:* 既然我们已经定义了一个指针变量,那么该如何使用它呢?这就像我们订了一间房需要入住,那就需要用钥匙。...引用操作符就相当于钥匙,通过钥匙就能通过地址找到变量,然后间接性地对变量进行操作。...我们尝试使用以下引用操作符: #include int main() { int a = 0; int* p = &a; *p = 10;//引用操作 printf("...这里要注意:引用操作符 * 和定义指针变量时 * 是不一样,定义变量时 * 只是表示它是一个指针变量。...注意:第一段代码中指针变量p由于自增,所以它在循环结束之后已经不再指向一个元素了,如果要重新访问这个数组,就需要先将第一个元素地址赋值给p,防止越界访问。

    12210

    初识C语言·指针(1)

    你看,*p = 20,就是修改了a值,*是引用操作符,这个* 和int* 里面的*可不是一样嗷,这个*就是一个操作符,int*这是一个整体,代表一个类型。...3 1)不同指针引用 既然同一平台下,指针变量大小是一样,那么为什么还有不同指针类型呢? 先看两段代码,在内存中调试看一下呢?...所以void*被称为泛型指针,即是无具体类型指针。但是void*也是有代价,它不能进行指针+-整数运算,也不能进行引用操作。 看吧,直接就报错了。 那void*是不是没有用呢?...当然,写成*pa + i是错误,*优先级比+高,系统会先对pa引用在加一个i,所以加个()是很好选择。 ii)指针 - 指针 有人就问了,欸为什么没有指针+指针呢?不急,看看这串代码。...,数组名就是首元素地址,首元素地址加上数组元素个数,指向了\0,令p是首元素地址,然后就是比较咯,这个相信是很容易理解,就不多介绍了。

    5210

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

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

    1.3K30

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

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

    34010

    【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

    拿捏指针(一)

    说到指针可能很多人既熟悉又陌生。那么什么是指针呢? 1.0 定义和地址 1.1 指针定义及 指针一个变量,它存储了指向一个变量内存地址。它可以用来间接地访问和修改这个变量值。...2.0 *引用操作符间接访问操作符) 我们要存放东西,拿东西就需要地址(指针),就可以通过地址(指针)找到地址(指针指向对象,这⾥必须学习⼀个操作符引⽤操作符(*)。...定义:引用操作符(*)用于访问指针指向内存地址中存储值。当使用引用操作符指针进行引用时,实际上是在访问指针指向内存单元。...3.1 const在*号左边 当const在*号左时,我们可以这样理解,*p指向指针内容,内容锁死了,保证指针指向内容不能通过指针来改变。 但是指针变量本⾝内容可变。...总结:指针类型决定了指针向前或者向后⾛⼀步有多⼤(距离)。 5.1.2 进阶 因为数组在内存中是连续存放,所以只要知道了首元素地址,就能知道后边元素地址和值。

    9110

    【C语言】手把手带你拿捏指针(1)(初始指针

    就是使用取地址操作符& 而且我们注意到,这里a是四个字节,为什么只显示了一个字节地址,这个地址又是谁地址呢?...如下: char ch = 'x'; char * pc =&ch;     与上面的指针变量pa同理,char表明指针变量指向字符型对象,*表明pc是一个指针变量 3.引用操作符(*)     我们将地址保存起来...a地址,去对a进行操作,这时候就要用到我们引用操作符(*),使用方法如下: int a = 100; int * pa = &a; * pa =100     在指针变量前加一个*,就可以通过指针变量存储地址引用...* 左边时     当没有const修饰时,我们可以通过引用修改指向变量,如果我们在 左边加一个const,就可以起到一个引用不能修改指向变量效果,这时const可以写在类型和中间,也可以写在最左边...,访问到了第一个元素,当i=1时,就是对&arr[0]+1进行引用,访问到了第二个元素,依此类推,最后可以实现打印所有数组元素效果,如图: 2.指针-指针     我们通过模拟实现函数strlen

    9510

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

    2.指针变量和地址:通过(&)取地址操作符获取地址,可将地址存储在指针变量中,指针类型如int ,引用操作符(*)用于操作指针指向对象指针变量大小取决于地址大小,与指针类型无关。...这就像现实生活中,这里有一个房子,你不能翻窗户进去,只能从正门进去,但是某一天呢,有事不在家,就把房门锁上了,你无法从正门进去了,于是你把窗户砸了,从窗户爬进去了。...指针+整数 } return 0; } 打印结果: 当我们知道数组一个元素地址,就可以通过指针加减整数方式得到其它元素。...3、指针使用 指针是一种用于存储变量地址特殊变量,通过它可以间接访问和操作所指向内存空间中数据。 通过前面的学习我们也了解了指针一些相关知识,那么指针使用包含哪几个方面呢?...3.引用:通过引用指针可以访问指针指向变量,例如*p = 100;表示将指针指向整数赋值为100. 4.指针运算:可以对指针进行加减运算,以移动指针指向不同内存位置。

    8110

    未禾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。

    51010

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

    2.2 指针变量与引用操作符(*) 2.2.1 指针变量 我们通过取地址操作符(&)拿到是地址是一个数值,比如:0x006FFD70(16进制),这个数值有时候需要存储起来以便后期使用。...1 char ch = 'w'; 2 char* pc = &ch; 2.2.3 引用操作符 前面我们把地址保存在指针变量中,那我们该如何把它拿出来使用呢?...那么这里就要介绍引用操作符 *。 我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针指向对象。 上面代码中我们就用到了 *(引用操作符)。...p 是首元素地址,那么 p+i 就是下标为 i 元素地址,再通过 * 进行引用操作找到数组元素,再通过 for 循环进行打印数组内容。...在数组 arr 中地址由低到高,所以 p<arr+sz 。arr 为数组元素地址。 6. 野指针 概念:野指针就是指针指向位置是不可知(随机、不正确、没有明确限制)。

    4610

    【C语言】指针详解(一)

    char b = 'a'; char* p = &b; 2.4 引用操作符 在C语言中,我们找到地址,就可以对地址所指向对象,而此时所要用到就是引用操作符(*)。...指针变量类型意义 指针变量大小和类型无关,只要是指针变量,在同一个平台下,大小都是一样为什么还要有各种各样指针类型呢 3.1 指针引用 对比,下面2段代码,主要在调试时观察内存变化。...结论:指针类型决定了,对指针引用时候有多大权限(一次能操作几个字节)。比如: char* 指针引用就只能访问一个字节,而 int* 指针引用就能访问四个字节。...5.3 指针运算关系 计算数组元素个数时,我们使用了sizeof(数组名),而sizeof中单独放数组名,这里数组名表示整个数组,计算是整个数组大小,单位是字节。...&数组名,这里数组名表示整个数组,取出是整个数组地址。 除此之外,任何地方使用数组名,数组名都表示首元素地址。 6.

    8610

    深入浅出C语言指针(基础篇)

    3.引用操作符 我们将地址保存起来,未来是要使⽤,那怎么使⽤呢? 在现实⽣活中,我们使⽤地址要找到⼀个房间,在房间⾥可以拿去或者存放物品。...C语⾔中其实也是⼀样,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针指向对象,这⾥必须学习⼀个操作符引⽤操作符' * '(也叫间接访问操作符)。 ​...3.指针引用 ​ ​ 我们可以看到: char* 指针引用就只能访问一个字节,而 int* 指针引用就能访问四个字节。...总结:指针类型决定了对指针引用时候有多大权限(能操作几个字节)。...六、指针运算 1.指针+- 整数 因为数组在内存中是连续存放,只要知道第⼀个元素地址,顺藤摸⽠就能找到后⾯所有元素。 ​

    13510

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

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

    13110

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

    int* pa = &a; *pa=30;//* -引用操作符间接访问操作符) //a被改成30 //通过*pa找到a //*pa其实就是a printf("...3.指针变量类型意义 指针类型决定了,对指针引用时候有多大权限(一次能操作几个字节) 比如:char指针引用就只能访问一个字节,而int指针引用就能访问四个字节 //指针类型有什么意义?...,void*类型指针不能直接进行指针+-整数和解引用运算 //void*指针不能进行指针运算,可以接收不同类型地址 //一般void*类型指针使用函数参数部分,用来接收不同类型地址 //...p,再利用*p引用,打印*p所指数 //p+1就是*(p+1),打印数组一个数字 //1.指针类型决定了指针+1步长,决定了指针引用权限 //2.数组在内存中是连续存放 //int...end++;//直到enf走到\0不满足条件就不进行循环了,此时*end指向就是\0 } return end-star;//两个指针相减得到就是指针之间元素个数 }//数组中最后一个元素指针减去第一个指针元素得到

    8910

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

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

    7410

    【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; } 结语: 这里我们关于初阶指针内容就介绍完了

    14030

    轻松拿捏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修饰指针

    10210
    领券