指针的入门和理解

/*
 ============================================================================
 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");
}
时间: 2024-08-03 18:13:09

指针的入门和理解的相关文章

新手入门:理解JavaScript中函数的使用

javascript|函数 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解. JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: function func1(-){-} var func2=function(-){-}; var func3=function func4(-){-}; var func5

指针-atof函数编程怎么理解?

问题描述 atof函数编程怎么理解? double myatof(char *p)//将字符串转换为浮点型,暂时只限小数点格式(如:342.678){ double n=0; int i=-1; while( 1 ) { if (isdigit(*p)) //如果是数字 { n = n*10 + (*p) -'0'; if(i != -1) i++; //小数位数i计数 } else if ( *p == '.' && i == -1) //如果是第一个小数点 i=0; //开启小数位数i

php入门微理解

1.php是什么?(来自百度百科)       php:Hypertext preprocessor(超文本预处理器).一种开源脚本语言.主要用于web开发. 2.与其他语言的关系       介于HTML和C/C++,Java,C#等语言之间.通常需要相应脚本解释器才能运行. 3.工作原理       通过web服务器(IIS or Apache)和php引擎程序解释执行完成.(工作过程和原理如下图,来自互联网)         4.asp/php/jsp的前景分析         Asp.n

C语言入门之指针用法教程_C 语言

本文针对C语言初学者详细讲述了指针的用法,并配以实例进行说明.具体分析如下: 对于C语言初学者来说,需要明白指针是啥?重点就在一个"指"上.指啥?指的地址.啥地址?内存的地址. 上面说明就是指针的本质了. 这里再详细解释下.数据存起来是要存在内存里面的,就是在内存里圈出一块地,在这块地里放想放的东西.变量关心的是这块地里放的东西,并不关心它在内存的哪里圈的地:而指针则关心这块地在内存的哪个地方,并不关心这块地多大,里面存了什么东西. 指针怎么用呢?下面就是基本用法: int a, b,

深入理解c++指针的指针和指针的引用_C 语言

展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它.(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递. 如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值.我们用下边的代码说明一下问题: int m_value = 1; void func(int *p) { p = &m_value; } i

直观理解C语言中指向一位数组与二维数组的指针_C 语言

一维数组和指针:对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我们

字符串-这一小段c程序怎么理解?

问题描述 这一小段c程序怎么理解? int main(void){ char str[81]; char *p temp; int inlength; gets(str); for (p = stri=0n = strlen(str); i<n/2; i++)//将整个字符串倒序 { temp = *(p+n-1-i); *(p+n-1-i) = *(p+i); *(p+i) = temp; } puts(str); p = str; length=0; 解决方案 for实现的功能就是第一个和倒

c++指针的应用及注意问题

指针是c/c++学习一个比较让人头痛的问题,在程序设计过程中,指针也往往是产生隐含bug的原因.下面就来谈谈指针的应用以及需要注意的一些问题,里面也许就有你平时没有注意到的问题,希望能帮助各位读者理解好指针. 一.我们先来回忆一下指针的概念吧,方便下面的介绍 指针是存放地址值的变量或者常量.例如:int a=1;&a就表示指针常量("&"表示取地址运算符,也即引用).int *b,b表示的是指针变量(注意,是b表示指针变量而不是*b),*表示要说明的是指针变量.大家注意

XML入门教程:XML是如何被利用的?

xml|教程|入门教程 理解这一点很重要,即XML是被设计为存储.传输以及交换数据的.XML不是被设计为用来显示数据的. XML可以将HTML与数据分离 通过使用XML,您的数据可存储于HTML之外. 当我们使用HTML来显示数据时,数据存储于HTML中.通过使用XML,数据可以被存储在单独的XML文件中.这样做的话,您就可以把注意力集中在使用HTML进行数据布局和显示上面,并确保底层数据的改变不会牵扯到HTML的改变. XML数据也可作为数据岛存储于HTML页面内部.您仍然可以专注于使用HTM