《C语言解惑》—— 2.10 引入指针更方便

2.10 引入指针更方便

如果引入一个新类型的变量(例如p),使p等于变量的地址,p代表变量的值,即对于上面的例子,只要使“p=&a”就使p存储了变量a的地址&a,而“p” 就是a的值,这就大大简化了表达式。通过声明一个指针变量,就可以实现这种操作。
int a=25;
int *p;
p=&a;
虽然p是指针变量,但这个变量与基本变量不一样。基本变量与基本数据类型相对应,如int变量存储整型值,char变量存储字符值,等等。但指针变量p存储的是地址值,
所以
printf("%p\n",p);
语句输出的是存储变量x的地址,它和语句
printf("%d",&x);
是等效的,都是输出十六进制地址值“0012FF7C”(其实,这个值取决于机器)。而且不管是何种类型的指针,编译器都给它分配4个字节。
既然p具体存放的地址是内存里存放变量a的地址,*p就是这个地址所保存的值,也就是变量a的值。所以语句
printf("%d",a);
输出变量a的值25,它的等效语句是
printf("%d\n",*p);
下面是一个完整的演示程序。对比它们的输出,就会明白其中的奥妙。
【例2.16】演示输出指针的例子。

#include <stdio.h>
void main ( )
{
        int a=25,*p;
        p=&a;
        printf("%d,0x%p\n", a, &a);
        printf("%d,0x%p\n", *p, p);
}

使用“0x”标识地址是十六进制,程序输出如下。
25,0x0012FF7C
25,0x0012FF7C

时间: 2024-12-22 21:23:56

《C语言解惑》—— 2.10 引入指针更方便的相关文章

《C语言解惑》—— 导读

前 言 C语言编程仍然是编程工作者必备的技能.目前有四类典型的学习C语言的教材:第一类是以讲授语法为主线,即流行的教科书方式,所涉及的例题均以正确的程序为主:第二类是以案例教学为主的教材,摆脱了语法的部分约束:第三类是以讲解编程技术为主的经验之作,主要针对已有编程基础的读者:第四类是针对编程容易产生错误的专题,对比正确与错误的程序以提高编程能力,涉及的内容比较专业.这些教材各有千秋,其共同的目的都是想教会读者如何编写正确.规范的程序.我们也曾在两部教材的每一章中尝试增加一节错误分析的内容,以期让

简单总结C语言中各种类型的指针的概念_C 语言

C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念.  常量指针:首先它是一个指针,常量只是用来修饰指针的定语.其定义如下: char const * cp; char a='a'; 如何识别呢?根据右结合优先,先是*优先,所以这个cp变量是一个指针,然后是const修饰*,所以这是一个常量指针.即指向常量的指针. cp=&a; //正常语法 *cp=a; //错误语法,因为其指向的值是一个常量  指针常量:首先它是一个常量

C语言 第八章 函数、指针与宏

一.函数 函数是一个包含完成一定功能的执行代码段.我们可以把函数看成一个"黑盒子", 你只要将数据送进去就能得到结果, 而函数内部究竟是如何工作的的, 外部程序是不知道的.外部程序所知道的仅限于输入给函数什么以及函数输出什么.函数提供了编制程序的手段,使之容易读.写.理解.排除错误.修改和维护.  计算1-n的和 #include "stdio.h" void main() { //write once only once 只写一次 int i,s=0; for(i

C# 语言规范--1.10 委托

规范 委托适用于那种在某些其他语言中需用函数指针来解决的情况(场合).但是,与函数指针不同,委托是面向对象和类型安全的. 委托声明定义一个类,它是从 System.Delegate 类派生的类.委托实例封装了一个调用列表,该列表列出了一个或多个方法,每个方法称为一个可调用实体.对于实例方法,可调用实体由一个实例和该实例的方法组成.对于静态方法,可调用实体仅由一个方法组成.如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且用的都是上述的同一组参数. 委托实例

C语言中的数组和指针汇编代码分析实例

  这篇文章主要介绍了C语言中的数组和指针汇编代码分析实例,本文用一则C语言例子来得到对应的汇编代码,并一一注解每句汇编代码的含义,需要的朋友可以参考下 今天看<程序员面试宝典>时偶然看到讲数组和指针的存取效率,闲着无聊,就自己写了段小代码,简单分析一下C语言背后的汇编,可能很多人只注重C语言,但在实际应用当中,当出现问题时,有时候还是通过分析汇编代码能够解决问题.本文只是为初学者,大牛可以飘过~ C源代码如下: 代码如下: #include "stdafx.h" int

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+   指针数组: 在一个数组中,如果它的元素全部都是指针

C语言 socket 如何发送带指针的结构体?

问题描述 C语言 socket 如何发送带指针的结构体? 发送一个带指针的结构体,我知道怎么发送? 先把结构体转换成字符串,然后发出.但是接收的时候,怎么接收到结构体中?thanks! 解决方案 发送: struct f;char *ffff[sizeof(f)];memcpy(ffff &f sizeof(f)); 接收: struct f; ffff为收到的数据 memcpy(&f ffff sizeof(ffff)); 解决方案二: C语言---结构体指针C语言--结构体中的指针C语

《C语言解惑》一导读

前言 C语言解惑 C语言并不大--如果以参考手册的篇幅作为衡量标准的话,C语言甚至可以归为一种"小"语言.不过,这种"小"并不意味着C语言的功能不够强大,而是说明了C语言里的限制性规则比较少.C语言本身的设计非常简洁精妙,这一点相信C语言的使用者早已有所体会. 不过,C语言的这种精妙对C语言的初学者来说,似乎是故作神秘.因为限制较少,C语言可以写成内容丰富的表达式,这可能会被初学者认为是输出错误.C语言的紧凑性允许以简洁凝炼的方式实现常见的编程任务. 学用C语言的过

c-C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么

问题描述 C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么 解决方案 p 没有初始化,也就是没有分配空间.典型的指针错误,不初始化,指针指向哪里呢? 解决方案二: array *p = new array(); 解决方案三: array p;test(&p); 解决方案四: 当然,使用指针应该首先初始化一个空地址的,否则,很容易发生指针地址错误其次,看了一下你的程序设计,程序本身是定义了一个array的结构体变量,在主函数中却要申请一个指针变量p(它的类型是结构体),一系列操