首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于指针数组解决思路

2012-04-11 
关于指针数组C/C++ codeint main() {int a[3][3],*p,ip&a[0][0]for(i0i9i++)p[i]ifor(i0i3i+

关于指针数组

C/C++ code
int main() {      int a[3][3],*p,i;     p=&a[0][0];     for(i=0;i<9;i++)     p[i]=i;       for(i=0;i<3;i++)     printf("%d",a[1][i]);     return 0;} 

  数组 p 中存储的是数组a的每一个元素的地址,p[i]=i;修改的则是它的地址,也就是说并没有给数组a赋值,
但是printf("%d",a[1][i]);输出的却是 p[i]=i;中赋予的值,为什么。请大神指教。。。

[解决办法]
int *p; // 整数指针

p=&a[0][0]; // 指向了数组 a 

p[i]=i; //为数组a赋值

但步执行你的程序,看 数组 a 的变化
[解决办法]
C/C++ code
#include <stdio.h>int main() {     int a[3][3];    int* p;    int i;    p=&a[0][0];    for(i=0; i<9; i++)    {        //p[i] = i; //这条语句实现赋值,与*(p+i) = i;等同        *(p+i) = i;    }              for(i=0;i<3;i++)    {        printf("%d", a[1][i]);  //表示输出第1行,第0,1,2列的值:345    }    return 0;}
[解决办法]
数组是一段连续分配的内存空间,p=&a[0][0];你让指针指向了这段连续空间的首地址,之前你声明的int* p 完全可以看成是一个一维数组,p[i]=i;也就是说你把二维数组看成了一维数组并进行了赋值 ,所以你输出的时候就是i

[解决办法]
p[i]=i //这句并不是修改数组的地址,而是给数组赋值。二楼的第一个注释揭露了本质。
自从你将:p=&a[0][0] ,这与p=a 或是p=&a[0]都是同一个意思。
[解决办法]
探讨
p[i]=i //这句并不是修改数组的地址,而是给数组赋值。二楼的第一个注释揭露了本质。
自从你将:p=&amp;a[0][0] ,这与p=a 或是p=&amp;a[0]都是同一个意思。

[解决办法]
多维数组地址也是连续的,你从这个内存块头一一赋值 也就是改变了这个连续内存块 自然改变数组值
[解决办法]
40分啊,我也来接点
 p=&a[0][0]; 记住赋值的,从右边网左读,那么就是把a[o][o]的地址给了指针P,换句话就是P指向数组a【0】[0];而且记住数组名其实就是个指针,p=&a[o][o];给数组赋值的时候我们就可以用指针代替,p[0]和
a[0]就没区别了,当然二维的时候p[i]=i; 这时候就是个他一个个赋值了,从p[o][o],p[0][1],p[0][2],
p[1][0].....这回明白不
[解决办法]
int a[3][3],*p,i;
p=&a[0][0];
p指向了二维数组中的第一个元素。
for(i=0;i<9;i++)
p[i]=i; 
这句话就是对这个二维数组中的每个元素进行赋值。相当于*(p+i) = i;

[解决办法]
C/C++ code
#include <stdio.h>int main() {     int a[3][3];    int *p;    int i;        p=&a[0][0];//    p=a;        for(i=0;i<9;i++)        p[i]=i;  //*(p+i)=i;  °Ñi¸³Öµ¸øp[i]  p[0]=a[0][0] p[1]=a[0][1] p[2]=a[0][2] p[3]=a[1][0] p[4]=a[1][1] p[5]=a[1][2] p[6]=a[2][0]    //p[7]=a[2][1] p[8]=a[2][2]         for(i=0;i<3;i++)        printf("%d",a[1][i]);    return 0;}
[解决办法]
探讨
引用:

C/C++ code

#include <stdio.h>

int main() 

int a[3][3];
int* p;
int i;
p=&amp;amp;a[0][0];

for(i=0; i<9; i++)
{
//p[i] = i; //这条语句实现赋值,与*(p+i) = i……

[解决办法]
int main() 

int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++)
p[i]=i;
for(i=0;i<3;i++)
printf("%d",a[1][i]);
return 0;


我来给你解释一下:

p=&a[0][0];这句,p指向了a[0][0],那么*p就是a[0][0]


而 p[i]这种写法,相当于*(p+i),就是指向a数组中的第i个元素(因为a数组虽然是2维的,但是连续存放,)
比如*(p+3)等价于a[1][0]
所以p[i]=i; 这句,就是给a数组赋值
然后下面就是输出了

热点排行