xqnx.net
当前位置:首页 >> C语言指向数组的指针 >>

C语言指向数组的指针

你的2个程序是不同的.关键知识是: 普通指针 和 数组指针 的 不同点.下面是简单的说明.int *p; 是普通的指针,指向一个地址.p=a; 让它指向2维数组的始地址.由于数组是按行排列,所以下标[i,j] 的 元素 a[i][j] 排在 i*4+j 位,即: p[i*4+j]

pi ppi是指针 带*是取值的意思*pi=str 意思是把str这个数组的首地址 放在pi所指的空间里 换句话说就是pi指向了str数组.用pi+1之类的就可以指向数组里面的东西 *(pi+1)等同于str[1]

指向数组的指针其实就是指向数组第一个元素的指针,C语言中数组名就是指向数组中第一个元素的指针.如有数组a[10],那么a就是指向第一个元素a[0]的指针

比如 *p[i], *p[0]就是其中一个指针,依次类推.int *p[i],*q; q=p[0];这里q就指向了指针数组p[0]的首地址;也可以这样写:p=q; p++;q就会指向下一个元素的地址了;q++=p++;那么q[1]就指向了p[1]; 个人理解,只可参考,采纳与否,看楼主了.

int **b;表示指针的指针如int x; int *p=&x;int **pp=&p;int (*p)[5]表示二维数组指针,其用法和一般指针相同,不需要分配内存,只需要指向需要访问的内存地址即可,如int x[5][5];int (*p)[5]=x;二维数组和一维数组是等价的,如int a[5][5];和int a[

这个指针是一个 "行指针" 他唯一能指向一个 有 6 列(因为该指针定义时候下标为6) 的二维数组, 赋值的时候只要将数组名任意一行的首地址赋给它 你上面的x 是第0行的首地址 也可以将第一行的首地址给他 那就是p=a[1]; 但是不能将一个

在这里for(p-a;p<(a+10);p++)使用指针 p 以前没有对指针赋值.这样不行.这样指针所指的地址是内存的一个随机地址.在给数组a赋值之前要有“p=a”这样才让指针指向数组的首地址. 而且最后的for(p-a;p<(a+10);p++)中的“p-a”使指针重新指向a 的首地址.p<(a+10)是相当于 P最多可以指向a[9] 的地址. “p++”是让p从a[0]一直上移到p指向a[9]

由于p是指针,所以p=a表示指向了这个数组的首元素地址,p++当然就表示指向下一个如果要表示a[i]的话,最常用a[i],也可以*(a+i),也可以是*(p+i)c语言规定:表达式1[表达式2]与 *((表达式1)+(表达式2))完全等价,也可以说 a[b]与b[a]也完全等价,也就是说a[i]和i[a]也是完全等价,你可以试试

对于一维数组来说,p是存储数组的地址,*(p+n)为该地址第n个位置的数值.对于二维数组来说,*(p+i)指向第i组的存储地址,而*(*(p+i)+j)才是存储地址中第i组第j位的值.在定义二维数组的时候,调试中,我们可以发现,每组数据的地址不是连续的,所以需要用指针数组来分别指向,当你把*p[4]的[4]去掉,指针就会出错就会发生错误.

先从存储的角度对二维数组作一个全面的了解.二维数组在内存中的存储,是按照先行后列依次存放的.从内存的角度看,可以这样说,二维数组其实就是一个一维数组,在内存中没有二维的概念.如果把二维数组的每一行看成一个整体,即看

网站首页 | 网站地图
All rights reserved Powered by www.xqnx.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com