a是数组名p是指针那*p=a和p=a有什么区别
经常在题目中看到*p=a这种我只知道定了指针p后,p=a的话就是指p指向数组的第一个元素的地址。*p指的第一个元素,如果这样的话那*p不就指向了数组的第一个元素的地址了么...
经常在题目中看到*p=a这种 我只知道定了指针p后,p=a的话就是指p指向数组的第一个元素的地址。*p指的第一个元素,如果这样的话那*p不就指向了数组的第一个元素的地址了么,可题目里不是这个意思
展开
7个回答
展开全部
首先你要明白,a是个十六进制的地址常量,a其实就是a[0]这个数值的地址,也就是a=&a[0] , p这个字母一般把它定义为地址, *p就是p指向的数值的值,你却把一个值定义为一个地址(*p=a 这种写法是错误的),不符合常理。不能这样定义, 只可定义为p等于a ,也就是*p等于a[0],p指向a[0], 你所求的是 *(p+2)的值,也就是求 a[3]的值。 因为有个定理因为当p=a,也即*p=a[0]时 那么 a[1]==*(p+1) a[2]==*(p+2) ..... 依次类推 a[i]==*(p+i) ,你所求的就是 *(p+2) 就是a[2],也就是3. 阴差阳错,你定义的错了,结果却对了,我也有点糊涂了。
这是你的跑图
正确的用法
我知道你的问题了,你写的没错。 你定义的时候,同时定义了数组和地址变量并且赋值,你用的是逗号隔开的,不是分号,你所谓的*p=a 其实是 int *p=a, 也就是 int *p ; p=a;
一句话,你写的并没有错。只是容易误解。
欢迎大家给我点赞,这么多回答的,就我才是明白人。
展开全部
1*p=a; //表示将a的值赋给p所指单元。
p=&a; //表示将p指向a单元,即将a单元的地址赋给p。
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。[1] 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
p=&a; //表示将p指向a单元,即将a单元的地址赋给p。
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。[1] 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你要明白,a是个十六进制的地址常量,a其实就是a[0]这个数值的地址,也就是a=&a[0] , p这个字母一般把它定义为地址, *p就是p指向的数值的值,你却把一个值定义为一个地址(*p=a 这种写法是错误的),不符合常理。不能这样定义, 只可定义为p等于a ,也就是*p等于a[0],p指向a[0], 你所求的是 *(p+2)的值,也就是求 a[3]的值。 因为有个定理因为当p=a,也即*p=a[0]时 那么 a[1]==*(p+1) a[2]==*(p+2) ..... 依次类推 a[i]==*(p+i) ,你所求的就是 *(p+2) 就是a[2],也就是3. 阴差阳错,你定义的错了,结果却对了,我也有点糊涂了。
这是你的跑图
正确的用法
我知道你的问题了,你写的没错。
你定义的时候,同时定义了数组和地址变量并且赋值,你用的是逗号隔开的,不是分号,你所谓的*p=a
其实是
int
*p=a,
也就是
int
*p
;
p=a;
一句话,你写的并没有错。只是容易误解。
欢迎大家给我点赞,这么多回答的,就我才是明白人。
这是你的跑图
正确的用法
我知道你的问题了,你写的没错。
你定义的时候,同时定义了数组和地址变量并且赋值,你用的是逗号隔开的,不是分号,你所谓的*p=a
其实是
int
*p=a,
也就是
int
*p
;
p=a;
一句话,你写的并没有错。只是容易误解。
欢迎大家给我点赞,这么多回答的,就我才是明白人。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组特别一点,数组的地址就是第一个元素的地址。
p=a的话,那么p就是数组地址,也可以说p是数组中第一个元素的地址。
p=a也就是p=&a[0]
*p是数组地址对应的那个数据,就是数组首个元素对应的那个数据,就是数组首个元素。
p=a的话,那么p就是数组地址,也可以说p是数组中第一个元素的地址。
p=a也就是p=&a[0]
*p是数组地址对应的那个数据,就是数组首个元素对应的那个数据,就是数组首个元素。
更多追问追答
追问
p指向的是地址*p是去p指向地址里的值,而a不是数组第一个元素的地址么,为什么*p可以指向地址阿
追答
*p=a的例子里,a是第一个元素的地址的话,那么*p就是地址,p就是地址(指针)的地址。例如:
int a[10];
int * p1;
int **p2;
p1=a;
*p1=10; 或 p[0]=10;
p2 = &p1; //p2(指针的指针)指向了一个p1的地址;
*p2 = a; //p2指向的内容(即p1)进行赋值。
**p2 = 10;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*p=a表示将a的第一个元素的地址赋值给p所指向地址的内容(或空间),p=a表示p指向a所在的地址
更多追问追答
追问
你的意思是不是*p=a就相当于p=a了阿
追答
不是,p表示一个房间,a也表示一个房间,房间里面的内容则分别表示为×p和a[0]等,×p=a表示将获得a[0]的钥匙放到p对应的房间,而p=a表示p这个房间以后表示的内容就是a表示的内容,p原来的房间取消掉,改头换面了。不知道明白了没有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询