引用数组指针
A. C语言用指针引用数组元素
(*p)[3]是定义一个指向一维数组的指针,数组元素为三。也就是说p指向的其实是a[0],a[1],a[2]这样的形式。
p=a;其实就是把第0行的首地址赋值给p.
所以答案C中p[1]即是把第1行的首地址给p,在此基础上向后移一位,取出地址中的元素数值。 *(p[1]+1)相当于a[1][1].所以是对的。
B的形式是对的,但是它相当于a[2][1],超出界限所以为错。剩下的两个格式就不对。
B. “用指针引用数组元素”是什么意思
就是说通过指针来访问数组,例如有一个指针int *p和一个数组int a[4][2]。如果p=&a则有*p=a[0][0],*(p+1)=a[0][1],*(p+2)=a[1][0]。。专。。指针就是一属个地址,操作起来会比数组效率高,但是这也在无形中给使用者增加了难度。
C. C语言二维数组指针 函数引用
通俗的说如果把二维数组看做一个表格的话,前面[3]代表行,而[5]代表列,
而一个数组的代表的最基本含义就是一个行,
那么数组指针的的话,必然是指向数组即指向行,那么说回这个题目,
int *[5]代表,该指针指向的是一个列为5个元素组成的数组,那么int a[3][5]代表的是有3行的每行有5个元素组成的数组,该指针指向的数组的存储大小与这个2维数组的单行存储大小匹配,自然可以指向其中的某一行
而int*[3]只有3个元素无法与5个元素相匹配,自然不能指向其中的一行
D. c语言指针变量引用数组
"i love china!"
"i am a student!"
这两个都是常量字符串,存储在 静态存储区 ,不容修改。
E. 数组指针和数组引用做参数的区别
都可以改变指向空间的值,传回主函数。
数组指针 是传入的地址 也就是新版建了一个指针变量(参数变权量),把数组的地址存在里面了,在程序中,这个参数是可以改变值的。
数组引用,是直接把原本的变量传过来了,没有新变量
也就是说,前者要比引用多了一个变量分配 释放的过程,效率略低,几乎可以忽略。
前者的优势是兼容C, 不支持引用的时候代码不用变。 而且编程更灵活一些。
F. 通过指针引用数组元素
[0]是首地址, &a[0][0]+3*1+2是首地址后面第五个元素,也就是a[1][2]
不能 p=a 这样赋值,p是int*[2]类型,a是int[2][3]类型 类型不同不能赋值
int a[2][3]是申请的一个连续地址,而*p[2]是一个指针数组,如果你能把每一行的首地址赋给这个指针数组的话,可以这么使用。但是如果只是给首地址赋值的话,此时这个指针数组的第二个元素,也就是第二行的首地址为一个随意地址,没有意义,不是连续的,所以不能实现*(p+3*1+2)来表示a[1][2]
G. 指向数组的指针和数组名的引用有何异同
指向数组的指针和数组名的引用有何异同,指向数组的指针是可以重新赋值的,可以让它指向别的变量。而数组名是一个常量指针,它是不可以更改值的。
H. 通过指针数组引用数组元素
*(&a[0][0]+3*1+2) &a[0][0]是首地址, &a[0][0]+3*1+2是首地址后面第五个元素,也就是a[1][2]
不能 p=a 这样赋值,p是int*[2]类型,a是int[2][3]类型 类型不同版不能赋权值
int a[2][3]是申请的一个连续地址,而*p[2]是一个指针数组,如果你能把每一行的首地址赋给这个指针数组的话,可以这么使用。但是如果只是给首地址赋值的话,此时这个指针数组的第二个元素,也就是第二行的首地址为一个随意地址,没有意义,不是连续的,所以不能实现*(p+3*1+2)来表示a[1][2]
I. 指针、数组名、引用三者的相同点与区别
上面一些说的太多,但重点没说;
1.指针:存放变量的地址的变量;
2. 数组名: 是一个常量类型的指针,这是与“指针”变量的最主要区别;
3.引用:用“地址”直接表示一个变量的手段,而指针是间接表示一个变量;
-----------------------------
!!!!!!!!!!!!!!!!
楼主连贴也不看了、也不结了,太忙了吧
J. c++ 怎么用引用传递 传 数组 ,怎么用指针传递传数组 求大神。 ,,,,
1 .函数定义:void f1(int *b[],int i) 函数调用 :f1(b,i);
你有没有发现 b是一个指向指针的指针了,用指针,你应该这样写:
函数定义:void f1(int *b,int i) 函数调用 :f1(&b,i);表示函数定义里边的b指向main函数里边 的 b;
2.用引用:函数定义:void f1(int* &b,int i) 函数调用 :f1(b,i);表示指针的引用。void f1(int &b[],int i)你这样写,就不对了吧,引用的指针。没有这样写的啊。
注意,形参和实参是不一样的。void f1(int *b,int i) 函数调用 :f1(b,i);如果你这样写,只是把main的b赋值个f1的b。并不是main函数里的b的本身。