读书人

自己总结的列指针和行指针大家看有什

发布时间: 2013-11-14 22:02:51 作者: rapoo

自己总结的列指针和行指针,大家看有什么错误没
void ceshi()
{
//首先先来介绍一下行指针和列指针
int a[4][4];
int *p;
int *p1;
p=a;
//让指针P 指向一个二维数组

p=p+i;
//这个语句表示二位数组第i行的首地址,做如下改变

p=p+i+i;
//这个语句在后面又加入了一个i,表示第2i行的地址

p1=*(p+i);
//这个语句跟 p+i 是一样的意思,有什么区别呢?

p1=*(p+i)+i;
//这个语句表示第i行第i列的地址,
//p1被称作列指针,p是行指针,两个在本身指针上加上变量的含义就不一样了,一个在行上移动,一个在某行的列上移动。
//相信熟悉的朋友 应该都能回忆起来
}
//根据上面总结一下指针的指针
void ceshi2()
{

int **t;
int *p;
int *a[3];
t=a;
//使一个指针的指针指向一个指针数组

for (i=0;i<3;i++)
{
a[i]=(int*)malloc(sizeof(int)*6);
}
//给a[i]数组里面的指针指向一个长度为6的int 内存空间

p=t[2];
//这个时候的p相当于等于a[2]; 他指向的是一个长度为6的int 空间

p=t[0]+1;
//p等于a[1];

p=(*t)++;
//这个又是什么意思呢? a【1】里面的地址内容自己+1然后给p?
//不是,他表示p指向了a[0]里面的第2个int空间。

//所以这里相当于行指针和列指针。
//之前总是在这里把他弄混
// 还有**一定要一级一级的赋值
}
[解决办法]
void ceshi2()
{
int i;
int **t;
int *p;
int *a[3];
t=a;
//使一个指针的指针指向一个指针数组

for (i=0;i<3;i++)
{
a[i]=(int*)malloc(sizeof(int)*6);
}
//给a[i]数组里面的指针指向一个长度为6的int 内存空间

p=t[2];
//这个时候的p相当于等于a[2]; 他指向的是一个长度为6的int 空间

p=t[0]+1;
//p等于a[1];
printf("p = %p,t = %p,*t =%p ,a=%p,a[0]=%p,a[2]=%p\n",p,t,*t,a,a[0],a[2]);
p=(*t)++;
//这个又是什么意思呢? a【1】里面的地址内容自己+1然后给p?
//不是,他表示p指向了a[0]里面的第2个int空间。
//PS: 这是找死,*t 是动态分配的,改掉以后,无法释放内存。
printf("p = %p,t = %p,*t =%p ,a=%p,a[0]=%p,a[2]=%p\n",p,t,*t,a,a[0],a[2]);
//所以这里相当于行指针和列指针。
//之前总是在这里把他弄混
// 还有**一定要一级一级的赋值
p = (*t)--;
printf("p = %p,t = %p,*t =%p ,a=%p,a[0]=%p,a[2]=%p\n",p,t,*t,a,a[0],a[2]);
for(i=0;i<3;i++)
free(a[i]);
}

读书人网 >C语言

热点推荐