指针的入门和理解

/*
 ============================================================================
 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-10-13 16:17:42

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

delphi指针简单入门

delphi指针简单入门:         看一个指针用法的例子:     1         var     2             X,   Y:   Integer;       //   X   and   Y   整数类型     3             P:   ^Integer;           //   P   指向整数类型的指针     4         begin     5             X   :=17; //   给   X   赋值     6

php入门微理解

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

计算机网络入门概念理解

计算机网络入门概念理解 下面我来讲解一些关于网络的基础知识,这些知识有利于帮助我们今后学习TCP/IP协议相关知识打好基础. 诞生背景 首先从网络的诞生背景讲起.一开始计算机的运作是独立存在的(独立模式),每个计算机有各自的业务,用户需要在不同的计算机上执行特定的业务逻辑.用户采用卡带的方式将程序和数据输入计算机让计算机进行运算.之后出现了分时系统,分时系统具有"多终端,一主机 "的特点,由于分时系统CPU时间片轮转的特性让用户有了"一人一机"的错觉.70年代后计算

Java入门——深入理解Java三大特性

Java入门——深入理解Java三大特性 本Blog内容: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法(getter,setter),如果不想被外界方法,我们大可不必提供方法给外界访问. 封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码. 可以对成员变量进行更精确的控制.(在setter方法中进行实际意义的校验) 总结:控制属性访问权限,不是你想改就能改.容易修改属性类型.精确控制属性的取值范围. 继承 继承是使用已存在的类

指针与链表结构理解

指针与链表结构理解#include<stdio.h>int main(void){ int a=3,*p; p=&a; printf("a=%d,*p=%d\n",a,*p); *p=10; printf("a=%d,*p=%d\n",a,*p); printf("Enter a:"); scanf("%d",&a); printf("a=%d,*p=%d\n",a,*p); r

深度学习入门必须理解这25个概念

深度学习入门必须理解这25个概念 2017年05月22日 21:11:51 Star先生 阅读数:30013 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/pangjiuzala/article/details/72630166 神经网络基础 1)神经元(Neuron)--就像形成我们大脑基本元素的神经元一样,神经元形成神经网络的基本结构.想象一下,当我们得到新信息时我们该怎么做.当我们获取信息时,我们一般会处理它,然后生成一个输出.类似地,在

指针、数组的理解与关系

一.指针的本质:变量,指针变量就是指针变量int *p:两个变量,一个p(指针变量本身)是int *类型的 另一个是*p(指针指向的那个变量)是int类型的注:指针说白了就是指针类型,前面定义的int类型是为了说明指针指向的那个数的类型,所以指针的解析方式都是按地址来解析的(不管你是char *还是double *,解析方式都是地址)而指向的那个数的类型就要看你怎么定义的了例如:int *aa是按照地址来解析的:*a则是按照int类型来解析的. (1)所有的类型的数据存储在内存中,都是按照二进制

结合示例说明C++中const和指针结合时怎么理解

在之前随笔<C++中const使用要点(一)>中简单叙述了const int*.int* const和const int* const的区别,记住三句话就能在实际运用时用对,但是看书时发现了指针常量.常量指针这些名词,发现明白这些概念对阅读文章时还是比较重要的. 关键:const和指针结合时代码从右往左看 1.常量指针(const pointer) 概念:常量是形容词,也就是说常量指针是一个指针,用const修饰的指针. 按照代码从右往左(概念名词从左往右)的阅读顺序,不妨试着写一下. Ste

C语言指针教程----入门到精通&lt;二&gt;

数组与指针: 一: 指针既然可以指向变量,那么必然可以指向一个数组.本节探讨数组与指针的关系.首先读者必须明白,数组名代表数组中首元素的地址. 那么如何表示数组中其他元素的地址以及其他元素本身呢? p+i或a+i就是a[i]的地址:相应的, *(p+i)或*(a+i)就表示的a[i]元素. 已经提到了数组名代表数组首元素地址了,那么所有用数组名做参数的函数都可以改写 成用指针做参数的函数. 二:多维数组的情况. 这里,读者首先有个意识,多维数组每一维也都是一维数组.假设有个二维数组a[3][4]