c语言指针1

#include <stdio.h>

/*
	2018-05-26
	地址是内存单元的编号

	指针就是地址,地址就是指针

	地址就是内存单元的编号

	指针变量是存放地址的变量

	指针(0019FF38)和指针变量(p)是两个不一样的概念

	可是要注意:一般咱们叙述时会把指针变量简述为指针,实际含义并不同

	

*/

int main(void)
{
	int * p;      // p是变量的名字,int *表示p变量存放的int类型变量的地址
				  // int *p 不表示定义了一个名字叫作*p的变量
				  // int *p 应该这样理解:p是变量名,p变量的数据类型是int *类型
				  //	所谓int *类型实际就是存放int变量地址的类型

	int i = 3;

	int j;

	p = &i;  //ok 
		/*

			1,p保存了i的地址,所以p指向i

			2,p不是i,i也不是p,更准确的说,修改p的值不会影响i的值,修改i的值也不会影响p的值

			3,若是一个指针变量指向了某个普通变量,则
			
					*指针变量	就彻底等同于	普通变量
					
					例子:
						若是p是个指针变量,而且p存放了普通变量i的地址
						则p指向了普通变量i
						
						*p 就彻底等同于i
						或者说:在全部出现*p的地方均可以替换成i
								在全部出现i的地方均可以替换成*p
								printf("%d\n",i); //输出3
								printf("%d\n",*p); //输出3
						*p 就是以p的内容为地址的变量
		
		*/
	j = *p;

	printf("i = %d ,j = %d ,*p = %d \n",i,j,*p);  //结果i = 3 ,j = 3 ,*p = 3
	printf("i的地址是:%p\n",&i);  //c语言中%p用来输出指针类型自身的值。也就是说%p用来输出地址
	printf("j的地址是:%p\n",&j);
	printf("p的地址是:%p\n",&p);
	printf("p的值是:%p\n",p);
/*
	输出结果:
		i = 3 ,j = 3 ,*p = 3
		i的地址是:0019FF38
		j的地址是:0019FF34
		p的地址是:0019FF3C
		p的值是:0019FF38
*/	
	return 0;
}

//变量i的地址是0019FF38,i的值是3
//变量p的地址是0019FF3C,p的值是0019FF38,即p的值就是i的地址
//*p 就是以p的内容为地址(即i的地址0019FF38)的变量,因此*p的值是3
//注意,你在运行的时候地址确定不是这样的,可是i的地址和p的值必定是同样的

1519466375966779.jpg

相关文章
相关标签/搜索