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. JS——如果数组中的信息存在多个相同的属性,那么则将这些相同的信息放到同一个children中。

    var arr = [ {name: '张三', age: 10, sex: '男'}, {name: '李四', age: 10, sex: '男'}, {name: '钱五', age: 11, ...

  2. go语言的结构体、指针、方法详解

    资源来自:https://blog.csdn.net/DXB2021/article/details/122652779 结体体定义如下: type author struct{ field1 typ ...

  3. [*]Is L2 Physics-Informed Loss Always Suitable for Training Physics-Informed Neural Network?

    NeurIPS 2022 本篇工作对PINN中的物理损失进行了探究,作者认为L2损失并不总是适用于训练PINN.并从PDE解的稳定性角度给出了理论性的说明.读了这篇文章,感觉自己的毕业论文做的十分浅显 ...

  4. jupyter notebook代码无法运行

    如果是anaconda的话,直接就带有jupyter而不需要重新安装,你这样子就是路径混乱了.先输入jupyter kernelspec list查看安装的内核和位置,然后进入显示的安装目录,打开ke ...

  5. Tensorflow框架实现中的“三”种图

    https://zhuanlan.zhihu.com/p/31308381 图(graph)是 tensorflow 用于表达计算任务的一个核心概念.从前端(python)描述神经网络的结构,到后端在 ...

  6. 工程师突击:SAP ABAP实用程序开发攻略.pdf

    工程师突击:SAP ABAP实用程序开发攻略.pdf 有需要的联系 wx :erpworld

  7. redis常用命令之Hash

    redis常用命令之Hash Hash常用命令 redis 可以理解为一个全局的大字典,key就是数据的唯一标识符.对应的key不同,value也不同.redis有5个基本的数据类型. 1 redis ...

  8. php 虚拟化 linux 入侵检测交作业 不要太nice

    #inclide<iostream> using namespace std; int main() { cout<<"暂时自闭一会er"; }

  9. Expected indentation of 2 spaces but found 4

    预期缩进2个空格,但发现4个 把缩进空格修改后如图

  10. javaSE-验证码生成

    一.使用Math类的radom() 方法 //生成验证码 String verifcationCode = ""; for (int i = 0; i <= 5; i++) ...