纯代码
#include<stdio.h>
int add(int a, int b)
{
return a + b;
}
int main()
{
{
int a[10] = { 1,2,3,4,5,6,7,8,9,10 }, *b = a;
printf("b的地址是:%#x\n", b);
printf("a[0]的地址是:%#x\n", &a[0]);
printf("a[0]的值是:%d\n", a[0]);
printf("b的值是:%d\n", *b);
printf("a[1]的值是:%d\n", a[1]);
printf("a[1]的值用指针取是:%d\n", b[1]);
printf("a[1]的值用指针取是:%d\n", *(b + 1));
printf("a[2]的值是:%d\n", a[2]);
printf("a[1]的值用指针取是:%d\n", b[2]);
printf("a[2]的值用指针取是:%d\n\n", *(b + 2));
b++;
printf("b++的地址是:%#x\n", b);
printf("a[1]的地址是:%#x\n", &a[1]);
printf("a[1]的值是:%d\n", a[1]);
printf("b++的值是:%d\n", *b);
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
{
int a[2][2] = {1,10,100,1000},*b = a;
printf("b的地址是:%#x\n", b);
printf("a[0][0]的地址是:%#x\n", &a[0][0]);
printf("a[0][0]的值是:%d\n", a[0][0]);
printf("b的值是:%d\n", *b);
printf("a[1][0]的值是:%d\n", a[1][0]);
printf("a[1][0]的值用指针取是:%d\n", *(b + 2));
printf("a[1][1]的地址是:%#x\n", &a[1][1]);
printf("a[1][1]的地址用指针取是:%#x\n",*(a+1)+1);//等于&a[1][1]
printf("a[1][1]的值是:%d\n", a[1][1]);
printf("a[1][1]的值用指针取是:%d\n", *(*(a+1)+1));//等于a[1][1]
printf("a[1][1]+1的值用指针取是:%d\n\n", *(b+3)+1);
b++;
printf("b++的地址是:%#x\n", b);
printf("a[0][1]的地址是:%#x\n", &a[0][1]);
printf("a[1][0]的地址是:%#x\n", &a[1][0]);
printf("b++的值是:%d\n", *b);
printf("a[0][1]的值是:%d\n", a[0][1]);
printf("a[1][0]的值是:%d\n", a[1][0]);
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
{
int a[2][2] = { 1,10,100,1000 };
int(*b)[2] = a;
printf("a[0][0]的地址是:%#x\n", a);
printf("a[0][0]的地址是:%#x\n", &a[0][0]);
printf("b的地址是:%#x\n", b);
printf("b[0][0]的地址是:%#x\n", &b[0][0]);
printf("b[0][1]的地址是:%#x\n", &b[0][1]);
printf("a[0][1]的地址是:%#x\n",&a[0][1]);
printf("a[0][0]的值是:%d\n",a[0][0]);
printf("a[0][1]的值是:%d\n", a[0][1]);
printf("b[0][0]的值是:%d\n",b[0][0]);
printf("b[0][1]的值是:%d\n\n",b[0][1]);
b++;
printf("b++的地址是:%#x\n", b);
printf("a[1][0]的地址是:%#x\n", &a[1][0]);
printf("a[1][0]的地址是:%#x\n", &a[1][0]);
printf("b++后的b[0][0]的地址是:%#x\n",&b[0][0]);
printf("b++后的b[0]的地址是:%#x\n", &b[0]);
printf("不存在定义:a[2][0]的地址是:%#x\n", &a[2][0]);
printf("不存在定义:b++后的b[1]的地址是:%#x\n", &b[1]);
printf("不存在定义:b++后的b[1][0]的地址是:%#x\n", &b[1][0]);
printf("a[1][0]的值是:%d\n",a[1][0]);
printf("b++后的b[0][0]值是:%d\n",b[0][0]);
printf("a[1][1]的地址是:%#x\n", &a[1][1]);
printf("b++后的b[0][1]的地址是:%#x\n", &b[0][1]);
printf("a[1][1]的值是:%d\n", a[1][1]);
printf("b++后的b[0][1]值是:%d\n", b[0][1]);
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
{ int a = 10, b = 20;
int(*c)()=add;//指向函数的指针
//c = add;
printf("两数之和是:%d\n", c(a, b));
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
{//二级指针
int a[3] = { 10,100,1000};
int *b = a;
int **c = &b;
printf("a[0]的值是:%d\n",a[0]);
printf("b的值是:%d\n",*b);
printf("c的值是:%d\n",**c);
printf("b的地址是:%#x\n",b);
printf("c的地址是:%#x\n",*c);
printf("a[1]的值是:%d\n", a[1]);
printf("a[1]的值用一级指针表示是:%d\n", *(b + 1));
printf("a[1]的值用二级指针表示是:%d\n", *(*c + 1));//相当于a[1]值
printf("a[1]的地址是:%#x\n",&a[1]);
printf("a[1]的地址用一级指针表示是:%#x\n", b + 1);
printf("a[1]的地址用二级指针表示是:%#x\n", *c + 1);//相当于a[1]地址
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
{
int a[2][2] = { 1,10,100,1000 };
int *b = a;
//int **c = &b;
int **c=&b;
printf("a[0][0]地址是:%#x\n", &a[0][0]);
printf("b地址是:%#x\n",b);
printf("c地址是:%#x\n",*c);
b++;
printf("a[0][1]地址是:%#x\n", &a[0][1]);
printf("b++地址是:%#x\n", b);
printf("c地址变为了:%#x\n", *c);
printf("a[1][0]地址是:%#x\n", &a[1][0]);
printf("b++再加1的地址是:%#x\n", b+1);
printf("c地址也加1变为了:%#x\n", *c+1);
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
{ //const int *a; 和 int const *a;一样 const可转换位置
int a = 3, b = 9;
const int *c = &a;
//*c = 9; 出错,const对*c做了限制,无法通过*c修改变量a的值
c = &b; //const对c没有限制可以改变指向
printf("*c的值是:%d\n", *c);
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
{
int a = 1, b = 2;
int *const c = &a;
*c = 3; //const对*c没有限制可以改变指向的变量a的值
//c = &b; 出错,const对c做了限制,无法通过b改变指向
printf("*c的值是:%d\n", *c);
printf("a的值是:%d\n", a);
}
printf("\n");
system("pause");
return 0;
}
End
~
记录留存