#include <stdio.h>
int main(int argc,char* argv[])
{
char c[] = {'a','b','c'};
printf("==================指针,指向数组=========================\n");
char* q = NULL;
q = c; //指向数组的初始地址 q = &c[0]; &q表示指针的地址 q是数组的首地址 *q是数组的值
q = q + 1; //指向数组的下一个值
printf("%c\n",q[0]); //输出b printf("%c\n",*q);
printf("%c\n",q[1]); //输出c
printf("%c\n",*(q+1)); //输出c
printf("==================数组指针,是一个指针,指向数组=========================\n");
char (*b)[3];
b = &c; //指向数组的整片内存区 &b表示指针的地址 b表示数组的地址 *b表示数组的地址 **b表示数组的值
printf("&b : %d\n",&b); //为c的初始地址:3340592
printf("b : %d\n",b); //为c的初始地址:3340616
printf("*b : %d\n",*b); //为c的初始地址:3340616
printf("%c\n",*(b[0])); //输出a
printf("%c\n",*(*b)); //输出a
b = b+1; //指向数组的结束符
printf("&c的初始地址为:%d\n",&c); //&c的初始地址为:3340616
printf("c的初始地址为:%d\n",c); //c的初始地址为:3340616
printf("c最后一个地址为:%d\n",&c[2]); //c最后一个地址为:3340618
printf("b的地址为:%d\n",b); //b第一个值指向的地址为:3340619
b = b - 1;
printf("b第一个值指向的地址为:%d\n",b[0]); //*b
printf("b第一个值存储的值为:%c\n",*(b[0])); //输出a
printf("*(b[0]+1)为:%c\n",*(b[0]+1)); //输出b
printf("*(*b+1)为:%c\n",*(*b+1)); //输出b
printf("==================指针数组,是一个数组,元素是指针的数组=========================\n");
char* p[3];
p[0] = c;
/*p[0] = &c[0]; //指向数组的初始地址 &p与p表示指针的地址 *p表示数组的首地址 **p表示数组的值
p[1] = &c[1];
p[2] = &c[2];*/
//p[0]= p[0]+1; //指向数组的下一个值
*p= *p+1;
printf("&c的地址:%d\n",&c); //输出&c地址 29478 92
printf("&p的地址:%d\n",&p); //输出&p地址 29478 48
printf("p的地址:%d\n",p); //输出p地址 29478 48
printf("数组的首地址:%d\n",*p); //输出p地址 29478 93
printf("%c\n",*(p[0])); //输出b **p
printf("%d\n",(*p+1)); //输出地址 29478 94 是指针地址加一,不是数组的首地址加一 等同于(p[0]+1)
printf("%c\n",*(p[0]+1)); //输出c
printf("%c\n",*(*p+1)); //输出c
printf("%c\n",*(*p-0)); //输出b
printf("%c\n",*(*p-1)); //输出a
p[3]= p[3]-1;
printf("数组的首地址%d\n",*p); //输出地址 29478 93
printf("%c\n",**p); //输出地址 b
return 0;
}
指针、数组指针、指针数组指向一维数组,指针加1或减1会输出什么?
最新推荐文章于 2022-05-08 15:49:45 发布