您的位置:首页 > 其它

数组的行地址、列地址和指针的应用

2008-08-18 21:37 246 查看
数组和指针的那点关系

1、数组的各种表示:

对二维数组 int
a[3][4],有

a-----二维数组的首地址,即第0行的首地址

a+i-----第i行的首地址

a[i] <=> *(a+i)------第i行第0列的元素地址

a[i]+j <=> *(a+i)+j -----第i行第j列的元素地址

*(a[i]+j) <=> *(*(a+i)+j) Û a[i][j]

a+i=&a[i]=a[i]=*(a+i)
=&a[i][0], 值相等,含义不同

a+i <=> &a[i],表示第i行首地址,指向行

a[i] <=> *(a+i) Û &a[i][0],表示第i行第0列元素地址,指向列

2、名词解释:

Int *p
n个指向整型数据的指针变量组成的指针数组P,即这个数组中存放的都是指针;

Int (*p)
p为指向含有n个元素的一维整型数组的指针变量,即数组指针;

如:char (*ptr)[2];//定义一个含有2个元素的一维char数组的指针变量

ptr = new
char
[2];//声明n个char类型的一维数组(这个数组中有2个元素),其中n为可变,也可不添;

程序举例:

char (*ptr)[2];//

ptr = new char[][2];

ptr[0][0] = 'a';

ptr[0][1] = 'b';

ptr[1][0] = 'c';

ptr[1][1] = 'd';

char *s = ptr[1];

cout << *s << endl;

s++;

cout << *s << endl;

int *p() :P为返回指针的函数,该指针指向一个整型数据,易理解不必多说;

int (*p)():P为指向函数的指针变量,该函数返回整型数据,一看例子便明了了:

int f1()

{

printf("this is
f1 /n");

return 0;

}

int f2()

{

printf("this is
f2 /n");

eturn 0;

}

int f3()

{

printf("this is
f3 /n");

return 0;

}

typedef int (*pFunc)();

pFunc func[3] = {f1,f2,f3};

int main()

{

while (1)

{

printf("please input a number between 1 to 3 /n");

int n = 0;

scanf("%d",&n);

if(n
>= 1 && n <=3)

{

func[n-1]();

}

else

{

printf("wrong number !/n");

continue;

}

}

return 0;

}

int **p:P为指针变量,它指向一个指向整型数据的指针变量,即双指针或二级指针;

3、二级指针与指针数组的关系

int **p 与 int
*q[10]

– 指针数组名是二级指针常量


p=q; p+i 是q[i]的地址


指针数组作形参,int *q[ ]与int **q完全等价;但作为变量定义两者不同


系统只给p分配能保存一个指针值的内存区;而给q分配10块内存区,每块可保存一个指针值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: