数组的行地址、列地址和指针的应用
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块内存区,每块可保存一个指针值
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块内存区,每块可保存一个指针值
相关文章推荐
- 彻底搞清C/C++中一维数组,二维数组,指针,数组指针和指针数组以及指向指针的指针,行地址和列地址之间的关系
- 彻底搞清C/C++中一维数组,二维数组,指针,数组指针和指针数组以及指向指针的指针,行地址和列地址之间的关系
- 函数指针数组的应用,但在类内作为成员使用,需要特殊处理,指针类型要匹配
- 指针,数组,连续开辟空间的地址分配和读取问题
- 【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析
- 用指针表示数组的地址与值
- 指针数组的应用-间接寻址表
- C 语言 里面的 指针 , 数组, 地址算数
- 指针的简单应用(二) 之指针与数组
- (六)指针的应用---址传递(实则为地址的值传递)
- 数组 指针 地址 加减 转换
- 应用(*p)[n]指针数组
- 指针数组的应用场景之main函数
- 字符数组和字符指针应用举例
- 指针指向数组并指定数组首地址的一种方法
- C/C++程序员实用大全学习笔记之(1):对数组应用取地址运算符&
- 二维数组的行地址与列地址应用举例
- C/C++ 关于数组的指针和数组元素首地址的一道经典题
- 指针数组与二维数组的应用
- C/C++拾遗:关于数组的指针和数组元素首地址的一道经典题