C语言初级阶段7——指针2——特殊指针

指针函数:是一个函数,返回值类型是一个指针。

#include<stdio.h>
int* fun()
{
//a是一个局部变量
int a = 10;
return &a;
}
int main() {
int* p = fun();
printf("%d\n", *p);//能输出一次的原因是编译器做了一次优化。
printf("%d\n", *p);//a是局部变量,执行完就被释放了。
return 0;
}

函数指针:是一个指针,指针的指向是一个函数。

定义格式:函数的返回值类型(*函数指针名)(函数的形参列表)

#include<stdio.h>
//函数名就是这个函数的首地址
void fun1(int a,int b)
{
printf("%d\n", a + b);
}
void(*pFun)(int a, int b);
int main() {
pFun = fun1;
pFun(1, 2);
fun1(3, 4);
return 0;
}
#include<stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
//这一部分是我写的,但是需要别人提供计算功能。
void fun3(int (*pF)(int, int), int x,int y)//int (*pF)(int,int)=add;也可以
{
printf("%d\n", pF(x, y));
}
int main() {
fun3(add,10,10);
fun3(sub, 10, 10);
return 0;
}
#include<stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
typedef int(*pF)(int, int);//函数指针取别名,别名就是它自己。
//并且别名可以当作类型去使用。
#define aa 123
//这一部分是我写的,但是需要别人提供计算功能。
void fun3(pF pf, int x,int y)//int (*pF)(int,int)=add;也可以
{
printf("%d\n", pf(x, y));
}
int main() {
fun3(add,10,10);
fun3(sub, 10, 10);
return 0;
}

常量指针:定义不用初始化,能改变指向,指向的内容不能被修改。

const int *p

指针常量:定义的时候,必须初始化,不能改变指向,可以改变指向的内容。这个常量的值是一个指针。

int *const p1:

#include<stdio.h>
void fun4(const int* a)
{ }
int main()
{
int a = 10;
int b = 20;
int* const p3 = &a;
printf("%d\n", *p3);
return 0;
}

大端存储和小端存储

1.大端存储:高位存于高位中(适合人的存储方式)

数据的地址:0x12345678

0x0-0x3这四个字节当中

0x0 12

0x1 34

0x2 56

0x3 78

2.小端存储:低位存于低位中(电脑默认的存储为小端存储)

数据的地址:0x12345678

0x0-0x3这四个字节当中

0x0 78

0x1 56

0x2 34

0x3 12

C语言初级阶段7——指针2——特殊指针的更多相关文章

  1. C语言之数组,字符串,指针

    一. 数组的定义 1.  数组初始化 初始化方式 int a[3] = {10, 9, 6}; int a[3] = {10,9}; int a[] = {11, 7, 6}; int a[4] = ...

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

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

  3. C语言中字符数组和字符串指针分析

    这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...

  4. C语言函数指针变量和指针函数以及指针数组

    C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ...

  5. C语言的本质(12)——指针与函数

    往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂.下面详细为大家介绍C语言中指针函数和函数指针. 1.指针函数 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需 ...

  6. C语言的本质(11)——指针与数组

    1.指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别.其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是"储存指针的数组 ...

  7. C语言的本质(10)——指针本质

    指针,大概是C语言中最难理解的概念之一了.指针这个东西是C语言中的一个基本概念,C99中对于指针的定义是: 1. 指针的类型是derived from其它类型,也就是说指针的类型是由它指向的类型决定的 ...

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

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

  9. 【嵌入式开发】C语言 结构体相关 的 函数 指针 数组

    . 作者 : 万境绝尘 转载请注明出处 : http://www.hanshuliang.com/?post=30 . 结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行 ...

  10. C语言复习: 二级指针和多级指针

    二级指针内存模型建立 void main2() {     int i = 0;       //指针数组     char * p1[] = { "123", "456 ...

随机推荐

  1. 【文献阅读】An efficient motion planning based on grid map: Predicted Trajectory Approach with global path guiding

    (1)主要工作内容 本文提出了一种基于轨迹预测法的欠驱动无人艇的全局运动规划算法.该方法考虑了无人艇的所有动力学约束,并且能找到一条根据船舶自身操纵系统进行跟踪的全局轨迹. 根据USV数学模型生成的预 ...

  2. JQuery的dataTable实现分页

    关于dataTable基本使用有很多帖子说的很详细,在此不做详述. 最近使用dataTable处理服务器返回分页数据时遇到问题,问题解决后有一些心得分享一下: 1. 如果打开界面通过dataTable ...

  3. 提交docker镜像到远程仓库

    生成镜像 Docker build 镜像 编辑Dockerfile文件 新建Dockerfile文件,将如下构建脚本复制进去 # Build for ansible envirament FROM c ...

  4. BIP change数据改变前的事件

    viewModel .get("certMaterialClass_name") .on("beforeValueChange", function (data ...

  5. Java8函数式编程(A)

    将行为作为数据传递 函数编程的最直接的表现,莫过于将函数作为数据自由传递,结合泛型推导能力,使代码表达能力获得飞一般的提升. Java8怎么支持函数式编程? 主要有三个核心概念: 函数接口(Funct ...

  6. MySQL Delete 表数据后,磁盘空间并未释放,为什么?

    有开发小哥咨询了一个问题,记录一下处理过程分享给有需要的朋友.问题如下:MySQL数据库中有几张表增删比较频繁.数据变动剧烈且数据量大,导致数据增长过快,磁盘占用多.为了节约成本,定期进行数据备份,并 ...

  7. DUBBO消费端Reference初始化

    1. ReferenceBean.java ReferenceBean.java 继承 ReferenceConfig.java, 主要的Reference初始化逻辑都在ReferenceBean的g ...

  8. Vue项目的打包方式(生成dist文件)

    一.相关配置情况一(使用的工具是 vue-cil) 如果是用 vue-cli 创建的项目,则项目目录中没有 config 文件夹,所以我们需要自建一个配置文件:在根目录 src 下创建文件 vue.c ...

  9. Python用telnet设置,抓UDP抓采样点并显示

    ====main.bat==== echo off rem "d:\Program\WiresharkPortable64\App\Wireshark\tshark.exe" -- ...

  10. Python中的容器、迭代器、生成器

    容器是一系列元素的集合,str.list.set.dict.file.sockets对象都可以看作是容器,容器都可以被迭代(用在for,while等语句中),因此他们被称为可迭代对象. 可迭代对象实现 ...