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

相關文章
相關標籤/搜索