(1)作用:正确而灵活的运用指针,能够有效的表示复杂的数据结构,能动态分配内存,方便地使用字符串,有效而方便地使用数组,可以直接处理内存单元地址。

(2)概念:①变量的指针:变量(3)的地址。(2000)

②指针变量:存放变量地址的(即指针)的变量。(i_pointer)

如图所示:

(3)为了表示指针变量与它所指变量之间关系,在程序中就出现了用户“*”符号表示指向的对象。(*i_pointer-->i,*i_pionter与i所表示的意思是相同的)

注意:变量的类型与指针变量的类型必须相同。(int i与int i_pointer都是int型)

(4)指针的移动:“指针+1”所移动的字节由指针的类型决定。(int i_pointer,移动字节为4个字节)

(5)指针变量引用:①&:取地址运算符。(取地址)

②*:指针运算符,取指针所指向对象的内容。(取内容)

(6)“&”与“*”为同优先级运算符,按从右到左的顺序①&*pointer的含义:意思是先运算*i_pointer-->i,再执行一个&运算,可得到&*i_pointer-->&i。

②*&a的含义是:&a-->i_pointer,  *&a-->*i_pointer,  *i_pointer-->a,  *&a-->a。

练习题:

编写一个函数实现两个数的交换:

#include<stdio.h>
int main()
{
    void swap(int x,int y);
    ,b=;
    swap(a,b);
    printf("%d %d\n",a,b);
}
void swap(int x,int y)
{
    int t;
    t=x;
    x=y;
    y=t;
}

结果如图所示:

原因分析:函数中的交换仅仅是X,Y中数值的交换,而没有改变a,b中的数值。原理如图所示:

正确代码如下:

#include<stdio.h>
int main()
{
    void swap(int x,int y);
    ,b=;
    swap(a,b);
}
void swap(int x,int y)
{
    int t;
    t=x;
    x=y;
    y=t;
    printf("%d %d\n",x,y);}

分析原因:改变的仅仅是X,Y中的内容,而没有改变a,b中的内容。

正确运用指针,交换a,b中内容方式如下:

#include<stdio.h>
int main()
{
    void swap(int *x,int *y);
    ,b=;
    int *x,*y;
    x=&a,y=&b;
    swap(&a,&b);
    printf("%d %d\n",a,b);
    printf("%d %d\n",*x,*y);
}
void swap(int *x,int *y)
{
    int t;
    t=*x;
    *x=*y;
    *y=t;
}
#include<stdio.h>
int main()
{
    void swap(int *x,int *y);
    ,b=;
    int *x,*y;
    x=&a,y=&b;
    swap(&a,&b);
    printf("%d %d\n",a,b);
    printf("%d %d\n",*x,*y);
}
void swap(int *x,int *y)
{
    int *t;/*定义一个指针变量*/
    t=x;/*交换的仅仅是x,y中的地址*/
    x=y;
    y=t;
    printf("%d %d\n",x,y);/*输出的是X,Y的地址*/
}

分析错误原因:地址交换,交换的仅仅是x,y中的地址。而a,b中的内容没有改变。

错误例子:

#include<stdio.h>
int main()
{
    void swap(int *x,int *y);
    ,b=;
    int *x,*y;
    x=&a,y=&b;
    swap(&a,&b);
    printf("%d %d\n",a,b);
    printf("%d %d\n",*x,*y);
}
void swap(int *x,int *y)
{
    int *t; /* *t没有指向对象 */
    *t=*x;
    *x=*y;
    *y=*t;
}

分析错误原因:*t没有指向对象,因此*t地址会随机选择,会出现危险动作。

结果如图所示:

(C语言)精髓——指针的更多相关文章

  1. 浅谈c语言的指针

    对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...

  2. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  3. C语言二重指针与malloc

    (内容主要源于网上,只是加入了些自己的剖析) 假设有一个二重指针: char **p; 同时有一个指针数组 char *name[4]; 如何引用p呢? 首先我们有程序代码如下 #include &l ...

  4. C语言函数指针基础

    本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...

  5. 试读《JavaScript语言精髓与编程实践》

    有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖 ...

  6. 为什么C/C++语言使用指针

    这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...

  7. C语言的指针变量

    C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...

  8. 《JavaScript语言精髓与编程实践》读书笔记

    JavaScript语言精髓与编程实践读书笔记 function v1(v1){ v1 = 100; alert('v1:'+v1); } function v2(name){ v1.apply(th ...

  9. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

随机推荐

  1. TCP/IP详解

    第一篇 TCPIP协议详解 第1章 TCPIP协议族 第2章 IP协议详解 第3章 TCP协议详解 第4章 TCP/IP通信案例:访问Internet上的Web服务器 一.TCP/IP协议族 TCP/ ...

  2. #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_8_0

    头文件处理 #import <UIKit/UIKit.h> #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_8_0 #else #imp ...

  3. nginx配置图片防盗链

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ expires 30d; access_log off; valid_referers none blocked ...

  4. Crontab的格式

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  5. hive odbc

    C:\Windows\SysWOW64  

  6. C#List的排序和简单去重总结

    List集合在开发过程中很常见,经常我们要对该集合进行一系列操作,本文介绍如何将该集合内的元素进行排序,博主制作简单WinForm应用程序进行演示. 首先,我们来看一下c#泛型List提供的Sort方 ...

  7. Gradle笔记——Gradle的简介与安装

    本博客对Gradle进行一个简单的介绍,以及它的安装. Gradle介绍 Gradle是一个基于JVM的构建工具,它提供了: 像Ant一样,通用灵活的构建工具 可以切换的,基于约定的构建框架 强大的多 ...

  8. [转]12款最佳Linux命令行终端工具

    摘要 “工欲善其事必先利其器”,作为菜鸟,也是从别人那里偷学来的一些东东.今天看到同事用到一个终端命令行工具,觉得自己弱爆了.然后在网上搜了下该工具.发现类似的工具还是挺多的,只是自己不知道罢了. 原 ...

  9. linux安装-版本选择-终极决定

    选用64位或32位的版本,注意看硬件: 内存大于4G的用64位, 小于4G的用32位 同时, 64位的版本在软件源, 软件的兼容性等问题. ----------------------------- ...

  10. linux的多媒体 播放 软件版权问题

    linux下基本很多 跟多媒体 相关的软件, 都是有版权的, 都是 第三方软件, 都是closed-resource的 都有版权问题, 因此, 几乎所有的 linux的 发行版 都不会带有 多媒体软件 ...