c语言中指针,二维数组,一维数组,指针数组,二级指针,应用

来源:互联网 发布:细说php第三版pdf下载 编辑:程序博客网 时间:2024/05/22 12:18

#include <stdio.h>

/*

在gcc 


*/



int main(void)
{
int a[3][4] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};



int i, j;
int *b[3] = {a[0], a[1], a[2]};//定义一个指针数组,里面从放二维数组的3个首地址三个首地址即使
/*
*存放二维数组的三个地址,数组名本身存放自己的地址
* */
int (*p)[4] = a;/*定义一个数组指针,存放二维数组中其中子数组的地址,取代二位数组的

其中一位的地址。
*/
// int *q = a[0];
// int *q = &a[0][0];
// int *q = *a;
int *q = (int *)a;/*
a为二维数组名+1偏移一个子数组的所占字节的个数强制装换成偏移一个数据类型的字节个数

*/
int **k = &q;/*
定义二级个指针将一个指针的地址赋给二级指针,
*/
int **n = b;/*b是指针数组的数组名,是一个地址量可以赋给二级指针。


*/
 
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1\n");
for(i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
for(j=0; j<sizeof(a[0])/sizeof(a[0][0]); j++)
{
printf("%d ", a[i][j]);//下标法取数组元素的值。
}
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *(*a+i));
/*二维数组的数组名表示指针常量,是一个数组指针,指向二维维指针的首地址
* ,内层的*代表指针的第三种用法
* 外层的*是指针的第二种间接访问的用法,+1 代表按从放顺序遍历整个数组。
*/
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *(a[0]+i));
/*
a【0】选定一个子数组,进行操作,


*/
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>4\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *(&a[0][0]+i));
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *((int *)a+i));
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6\n");
for(i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
for(j=0; j<sizeof(a[0])/sizeof(a[0][0]); j++)
{
printf("%d ", *(b[i]+j));
}
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *(*p+i));
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8\n");
for(i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
for(j=0; j<sizeof(a[0])/sizeof(a[0][0]); j++)
{
printf("%d ", *(*p+j));
}
p++;
}
printf("\n");


p = a;
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *((int *)p+i));
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>10\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *(q+i));
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>11\n");
for(i=0; i<sizeof(a)/sizeof(a[0][0]); i++)
{
printf("%d ", *(*k+i));
}
printf("\n");


printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>12\n");
for(i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
for(j=0; j<sizeof(a[0])/sizeof(a[0][0]); j++)
{
printf("%d ", *(*n+j));
}
n++;
}
printf("\n");


/*

printf("%p\n",*a);
printf("%p\n",&a);
printf("%p\n",a);
// printf("%d\n",(*a)++);
// printf("%d\n",(&a)++);
// printf("%d\n",a++);

printf("%p\n",*a);
printf("%p\n",&a);
printf("%p\n",a);
*/





return 0;




以上代码是华清远见牛立兵老师操作

原创粉丝点击