您的位置:首页 > 编程语言

指针与数组的示例代码(帮助理解)

2017-08-11 15:35 260 查看
以下是指针与数组关系的事例代码,帮助理解

#include

#define DEBUG 1
#if DEBUG
int main()
{
int a[5] = {1, 2, 3, 4, 5};
int b[2][3] = {{1, 2, 3}, {4, 5, 6}};
/*一维数组*/
printf("*a is %x\n", *a);           //一维数组的首地址中的值为1,
printf("a is %x\n", a);             //一维数组的首地址
printf("&a is %x\n", &a);           //一维数组的首地址,读取方式为一维数组大下
printf("(&a)+1 is %x\n", (&a) + 1); //一维数组的首地址
printf("a[0] is %x\n", a[0]);       //一维数组的首元素
printf("&a[0] is %x\n", &a[0]);     //首元素的地址
printf("a+0 is %x\n", a + 0);       //a是数组名,是一个一级指针常量
printf("a+1 is %x\n", a +  1);       //a的读取方式为一个int的大小
printf("\n");

/*二维数组*/
printf("**b is %p\n", **b); //二维数组的首元素的值
printf("*b is %p\n", *b);   //二维数组第0行(一维数组)一维数组首元素的地址
printf("b is %p\n", b);     //b是一个二级常量指针
printf("&b is %p\n", (&b)); //读取方式为一个二维数组大小
printf("(&b)+1 is %p\n", (&b) + 1);
printf("(*b)+1 is %p\n", (*b) + 1); //二维数组第0行(一维数组)第二个元素地址
printf("b is %p\n", b);             //b是一个二级常量指针,读取方式为一行
printf("b+1 is %p\n", b + 1);       //二维数组第1行(一维数组)元素地址
printf("\n");
printf("&b[0] is %p\n", &b[0]); //二维数组第0行(一维数组)一维数组首元素的地址,读取方式为一行元素
//printf("&(&(b[0])) is %p\n", &(&(b[0])));//error: lvalue required as unary '&' operand
printf("(&b[0])+1 is %p\n", (&b[0]) + 1); //二维数组第1行(一维数组)一维数组首元素的地址
printf("b[0] is %p\n", b[0]);             //读取方式为一个int元素
printf("b[0]+1 is %p\n", b[0] + 1);

printf("\n");
printf("*b[0] is %p\n", *b[0]);
printf("*(b[0]+1) is %p\n", *(b[0] + 1));

printf("\n");
printf("b[0][0] is %p\n", b[0][0]);
printf("&b[0][0] is %p\n", &b[0][0]); //读取方式为一个int大小
printf("(&b[0][0])+1 is %p\n", (&b[0][0]) + 1);
return 0;
}
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 内存 指针