C语言指针综合笔记

纯代码

#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

~
记录留存


发布了34 篇原创文章 · 获赞 0 · 访问量 506

猜你喜欢

转载自blog.csdn.net/weixin_44228006/article/details/104095490