码迷,mamicode.com
首页 > 其他好文 > 详细

指针的入门和理解

时间:2015-02-23 23:42:05      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

/*
 ============================================================================
 Name        : TestPointer.c
 Author      : lf
 Version     :
 Copyright   : Your copyright notice
 Description : 指针的入门和理解

 一个程序载入内存时,系统会为变量和函数均分配内存,所以每个变量和函数都有其对应的内存
 地址.
 所以在C语言中有一个很常见的操作&就是用来取地址的;
 而*是操作是用来:根据地址取出该内存地址对应的内存单元中的数据.
 即*操作根据地址取出内容

 小结:
 int num=9527;
 int *p=#

 1 既然&操作是为了取变量的地址.
        比如语句&num,num是一个变量&num就是取变量的地址.
        那么*p操作也是类似的原理.
   *操作是根据地址取出内容
        比如语句*p,p就是一个地址;*p就取出了该地址里保存的数据.
        所以p和&num是等价的!!!!

 2 为什么在*p前面有一个int修饰呢?
        因为p仅仅是一个开始地址,这里int就告诉了程序访问的范围
        即从p这个开始地址开始,到(p+int类型的长度)的地址作为结束.
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	testPointer();
	pointerSize();
	return EXIT_SUCCESS;
}

/**
 * &num取变量的地址.
 * 其实&num也是一个指针,它就指向了num.参见:
 * printf("*(&num)=%d,num=%d\n",*(&num),num);
 *
 * int num=9527;
 * int *p=#
 * 要清楚一点:
 * &num是一个常量,但是p是一个指针变量可以存储一个地址
 */
void testPointer(){
	int num=9527;
	int *p=#

	//指针p本身在内存中的地址
	printf("&p=%x\n",&p);
	printf("===========\n");

	//p中保存了num的地址.所以p和&num等价!!!!
	printf("p=%x,&num=%x\n",p,&num);
	printf("===========\n");

	//*p,得到p中保存的地址且取出改地址里保存的值.
	//所以*p和num等价
	printf("num=%d,*p=%d\n",num,*p);
	printf("===========\n");


	/**
	 * 由上小结:
	 * 1  既然&操作是为了取变量的地址.
	 *   比如语句&num,num是一个变量&num就是取变量的地址.
	 *   那么*p操作也是类似的原理.
	 * 2 *操作是根据地址取出内容
	 *   比如语句*p,p就是一个地址;*p就取出了该地址里保存的数据.
	 *   所以上面的例子中可以看到p和&num是等价的!!!!
	 */


    //因为&num是一个地址,其实也是一个指针,指向了num
	//所以用 *(&num)取出该指针指向的值.
	//*(&num)和num是等价的
	printf("*(&num)=%d,num=%d\n",*(&num),num);
    printf("===========\n");
}



/**
 * 指针的大小.
 * 指针是一个地址,所以它都是32为的.
 * int *int_pointer
 * char *char_pointer;
 * double *double_pointer;
 * 它们都是32位的,代表了一个开始地址!!!
 */
void pointerSize(){
	int *int_pointer;
	char *char_pointer;
	double *double_pointer;

	printf("int_pointer size=%d\n",sizeof(int_pointer));
	printf("char_pointer size=%d\n",sizeof(char_pointer));
	printf("double_pointer size=%d\n",sizeof(double_pointer));
	printf("===========\n");
}



指针的入门和理解

标签:

原文地址:http://blog.csdn.net/lfdfhl/article/details/43919771

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!