`
Ydoing
  • 浏览: 100488 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

C语言指针必知必会

 
阅读更多

每个指针都有一个值

指针是一个非负的整数值,表示存储的地址.

指针必定有个类型

这个类型指的是指针指向这个地址单元(连续的地址空间)存放的数据类型.void表示泛型,可以转换成任何类型.

用”*”可以声明一个指针变量, 也可以间接引用指针.

用(int *)p来声明p是指针, 类型为int. 通常情况下括号可以省略. 用*p解引用来获取指针p指向的值.

用&获取一个变量的地址

&只能放在在变量的前面, 即只能操作左值.

可以改变一个指针的类型,但是指针的值没有变

指针的类型和指针的值应该分开来看待.

指针和数组密切相关

数组名在特定的情况下可以转换为一个指针, 只不过数组名是一个不能改变的指针, 不能做自增和自减移动.

指针可以指向函数

函数名就是一个指针变量, 只是C语言把它简化了, 不需要显示声明函数为指针. 既然函数名是一个指针变量, 我们就可以把函数名当做右值赋值给另一个函数指针. 可实现回调函数(callback).

实例

#include<stdio.h>

void swap(int *x, int *y){
    int t = *x;
    *x = *y;
    *y = t;
}

int main(){
    //声明指针
    int *p;
    int x = 13;
    p = &x;//获取变量的存储地址

    printf("The value of p is: %d\n", p);
    printf("The size of p is: %d\n", sizeof(p));

    //指针类型转换
    char *q = (char *)p;

    printf("The value of q is: %d\n", q);//返回的值和p一样
    printf("The value of *q is: %d\n", *q);//返回值为13,说明系统按小端序存放数据

    //声明一个函数指针fswap, 函数签名与swap一样.
    void (*fswap)(int *, int *);
    fswap = swap;//函数指针fswap赋值

    int a = 3, b = 5;

    //函数指针调用
    fswap(&a, &b);
    printf("after swap: a is %d, b is %d\n", a, b);
}

输出:

The value of p is: 1200656396
The size of p is: 8
The value of q is: 1200656396
The value of *q is: 13
after swap: a is 5, b is 3
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    c语言指针学习笔记(24k黄金专属版)

    C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。 通常,我们用int类型保存...

    c语言指针详解和用法

    本文系统的介绍了c语言的核心-指针、并对指针的各种用法进行了归纳、对于使用c编程的程序员来说是必看的、相信看文本文会对指针有一个更加深刻的认识、尤其是对于初学者、指针是一个比较难理解的概念、只有深刻理解...

    c语言难点分析整理,C语言

    49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. ...

    高级C语言详解

    49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. ...

    史上最强的C语言资料

    49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. ...

    C语言难点分析整理

    49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. ...

    免费下载:C语言难点分析整理.doc

    49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. ...

    高级C语言 C 语言编程要点

    49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. ...

    高级C语言.PDF

    1. C 语言中的指针和内存泄漏 ............................................................................................................. 5 2. C语言难点分析整理 ..........................................

    高级进阶c语言教程..doc

    49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. ...

    C语言难点分析整理.doc

    49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55...

    C语言入门经典(第4版)--源代码及课后练习答案

    该资料是《C语言入门经典(第4版)》的源代码及课后练习答案 对应的书籍资料见: C语言入门经典(第4版) 基本信息 原书名: Beginning C: From Novice to Professional, Fourth Edition 原出版社: Apress 作者: ...

    220个C源代码 初学C语言必备

    057 运动会分数统计 058 双链表 059 约瑟夫环 060 记录个人资料 061 二叉树遍利 062 浮点数转换为字符串 063 汉诺塔问题 064 哈夫曼编码 065 图的深度优先遍利 066 图的广度优先遍利 067 求解最优交通路径 ...

    你必须知道的495个C语言问题

    一个声明包含如下几个部分(但是并非都必不可少):存储类型、基本类型、类型限定词和最终的声明符(也可能包含初始化列表)。每个声明符不仅声明一个新的标识符,同时也表明标识符是数组、指针、函数还是其他任意的...

    电赛必备220个C语言实例源码分享-电路方案

    找了很多地方都不全,最后在CSDN上用积分下载了这个,准备电赛的朋友可能会用的上的。同时供C语言初学者可以参考。包括五子棋游戏、图书管理系统等。附件内容包括C语言源码和turbo C exe文件。 清单如下: 第一部分 ...

    c/c++ 学习总结 初学者必备

    (C语言里参数传递都是传值,是一个拷贝,修改指针,只是改变了拷贝的指向,原指针指向并没有改变,而修改指针的内容则是可以的。)如果函数的参数是一个指针,不要指望用该指针去申请动态内存。(即上面所说的修改...

    [C大学教程(第五版)].(美)戴特尔.扫描版.pdf

    语言的讲解非常完整,使得这本书也同样适用于有经验的程序员,本书新增加了基于Allegro C函数库的游戏编程章节,也同样会吸引很多青少年程序设计人员。这是一本杰出的c程序员教程与参考书。 --Ray Seyfarth,...

    入门学习Linux常用必会60个命令实例详解doc/txt

    入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不...

    软件工程工具书.docx

    可能会有被我遗忘的书希望大家提醒 C、C++: 语法基础: C程序设计语言 第二版 C语言之父的书,不用多说。(C语言之父不是谭浩强) C Primer Plus 第五版 C++ Primer Plus 第五版 C++编程思想 总感觉没有Java编程...

Global site tag (gtag.js) - Google Analytics