int main(int argc, char* argv[])
{
char c[][2] = {{'a','b'},{'c','d'},{'e','f'}};
printf("==================指针,指向数组=========================\n");
char* q = NULL;
q = c[0]; //指向数组的初始地址 q = &c[0][0];
printf("%c\n",q[5]); //输出f
q = q + 1; //指向数组的下一个值
printf("%c\n",q[0]); //输出b
printf("%c\n",q[4]); //输出f
printf("==================数组指针,是一个指针,指向数组=========================\n");
char (*b)[2];
b = c; //指向每一行数组的整片内存区 b = &c[0];
printf("%c\n",*(b[0])); //输出a
printf("*(*(b + 1) + 1)为:%c\n",*(*(b + 1) + 1)); //输出d
printf("c的初始地址为:%d\n",c); //c的初始地址为:3537476
printf("&c[2][1]为:%d\n",&c[2][1]); //&c[2][1]为:3537481
printf("c[2][1]为:%c\n",c[2][1]); //f
b = b+1; //指向数组的下一行的第一个值
printf("b第一个值指向的地址为:%d\n",b); //b第一个值指向的地址为:3537478
printf("b第一个值存储的值为:%c\n",*(b[0])); //输出c
printf("*(b[0] + 1)为:%c\n",*(b[0] + 1)); //输出d
printf("*(b[1])为:%c\n",*(b[1])); //输出e
b = b - 1;
printf("b第一个值指向的地址为:%d\n",b[0]); //3537476
printf("b第一个值存储的值为:%c\n",*(b[0])); //输出a
printf("*(b[0]+1)为:%c\n",*(b[0]+1)); //输出b
printf("================指针数组,是一个数组,元素是指针的数组==================\n");
char* p[3];
p[0] = c[0]; //指向数组的初始地址
p[0]= p[0]+1; //指向数组的下一个值
printf("%c\n",*(p[0])); //输出b
printf("%c\n",*(p[0]+1)); //输出c
printf("%c\n",*(*p+1)); //输出c
return 0;
}
指针、数组指针、指针数组指向二维数组,指针加1或减1会输出什么?
最新推荐文章于 2024-01-30 22:46:56 发布