利用表达式a[i]可以访问int型数组a中下标为i的元素。在执行了语句int*p=a后,利用指针p也看访问该元素,相应的表达式是(填空)
麻烦详细分析一下,我是C++小白........
因为 p 是一个 int 型的指针变量,存储了数组的起始地址,所以通过下标索引 p[i] 可以访问到其后的第 i 个元素;将 p 指针加上 i 后,得到的是数组往下第 i 个元素的地址,前面再取 * 运算,即取得了元素。
追问*(p+i)和a+i一样吗?是一个意思吗..............*p和a是什么关系(请原谅我问这么幼稚的问题.......)
追答a + i 得到的是一个指针(一个内存地址),需要对它取 * 操作才能取到元素,p 也是同样的道理。只不过 a 是数组名,是一个常量地址,而 p 是一个指针变量,它本身是有内存空间的,可以用来存储地址。
关于c++指针的问题请高手赐教
1、表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针 因此如a[i]这样的访问都被编译器改写或解释为*(a+i)的形式,同样取下标操作符的操作数是可交换的,所以a[3]可以写成3[a],不过通常你不会这样做。2、下标总是与指针的偏移量相同,下标*sizeof(元素类型)就是偏...
有关C++指针和数组的一个小问题
数组是一种类型,独立的类型,不是什么指针或者地址。所谓数组名能作为数组首地址,是因为c++进行了隐式的类型转换。就好像 char c = 'a';int i = c;一样,其实是int i = static_cast<int>(c);,只不过char类型被隐式转换成int不需要写出来。所以数组作为地址时c++其实做的是int *p=static_...
c\/c++中的指针的应用及注意问题
int *b,b表示的是指针变量(注意,是b表示指针变量而不是*b),*表示要说明的是指针变量。大家注意int *b[2]和int(*b)[2]是不同的,int *b表示一个指针数组,而int (*b)[2]表示含有两个元素的int指针,这里要注意运算优先级问题,有助于理解指针问题。在这里大概介绍基本概念就够了,...
c++ 数组用指针方式传递给函数以后如何获得数组的长度?
这里的“属性”指的是数组可以使用sizeof(Array)\/sizeof(Array[0])的方法获得其长度的方法的属性。要在一个函数中得到一个数组的长度,你应该这个数组作为一个引用传出去,那样,就能用sizeof(Array)\/sizeof(Array[0])的方法获得长度了。
有关c++中数组与指针的关系
1,数组是一块内存连续的数据。2,指针是一个指向内存空间的变量。对于数组来说,数组的首地址,也可以用指针来表示操作,如:int a[10];int *p,n;p = a;对第一个元素取值,可以用几种方法:n =a[0];n = *p;n = p[0];n = *(p+0) ;3,不同的地方是数组是由编译器分配的空间,...
C++指针问题?这里选项b为什么是错的?是不是题目有误?
题目正确(附实例程序验证),D选项正确的话,那么B选项明显是错误的。注意B选项得到的是 : 元素b[3][0]的值加3。详细说明:int b[4][4],数组有4行4列,注意数组下标从0开始到3。(b+3)表示第四行的起始地址,那么这个地址+3,(*(b+3)+3)就是第四行第四列数据的地址。这就是正确...
C++ 数组与指针
int *b=a;由于b是指针,无论是否指向a,指向什么,sizeof(b)等于sizeof(int),32位平台上等于4。以上讨论的问题引发的关于数组名称的问题:数组名本身是个地址常量,但是某些特殊情况下它的语义可以发生改变。例如sizeof(a),这时a表示整个数组对象(这里指语法对象,不是指类的实例)而不是这个常量...
c++问题,指针和数组
1、"int coats(10);*(coats+4)=12,指针是不是指向数组第五位元素"?回答"不是"。因为指针指向的是首元素,而+4以后是对编号为4的第五个元素操作。2、"*coats=&coats(4)这样的结果,(括号不要管)"也是不对的。因为*coats表示的是编号为0的首元素值(coats[0]),应该是*coats==...
c++指针与数组首地址的问题!
在具体一点: 假设数组的首地址是INDEX1(那么INDEX1就是a[0]的地址了~), 那么这个值存在a中, 而a放在地址为INDEX2的内存位置, 其值为INDEX1 p=a 结果为 p=INDEX1, 这个是你想要的 p=&a 结果为 p=INDEX2, 这个不是你要的吧 p=&(a[0]) 结果为 p=INDEX1, 也行 个人理解, 如有...
请教C++二维数组和指针的简单问题。
第二题 主要是明白*s[2]这个是什么。其实有两个操作符,一个是解引用操作符*;另外一个是下标操作符[]。查一下优先级吧。应该先是下标操作所以*s[2]变成了*(s[2])。那么s[2]是什么呢?其实由定义char s[4][6]可以明白。s中存放的是指向字符串的指针。s[2]是一个指针,指向一个字符串...