C语言初级阶段7——指针2——特殊指针
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——特殊指针的更多相关文章
- C语言之数组,字符串,指针
一. 数组的定义 1. 数组初始化 初始化方式 int a[3] = {10, 9, 6}; int a[3] = {10,9}; int a[] = {11, 7, 6}; int a[4] = ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...
- C语言函数指针变量和指针函数以及指针数组
C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ...
- C语言的本质(12)——指针与函数
往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂.下面详细为大家介绍C语言中指针函数和函数指针. 1.指针函数 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需 ...
- C语言的本质(11)——指针与数组
1.指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别.其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是"储存指针的数组 ...
- C语言的本质(10)——指针本质
指针,大概是C语言中最难理解的概念之一了.指针这个东西是C语言中的一个基本概念,C99中对于指针的定义是: 1. 指针的类型是derived from其它类型,也就是说指针的类型是由它指向的类型决定的 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- 【嵌入式开发】C语言 结构体相关 的 函数 指针 数组
. 作者 : 万境绝尘 转载请注明出处 : http://www.hanshuliang.com/?post=30 . 结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行 ...
- C语言复习: 二级指针和多级指针
二级指针内存模型建立 void main2() { int i = 0; //指针数组 char * p1[] = { "123", "456 ...
随机推荐
- html的table多级表头表格的代码
1,两级表头的代码 <html> <head> <title>多层表头</title> <link rel="stylesheet&qu ...
- 百度地图的API接口
API接口 API:应用程序接口(API:Application Program Interface) python 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好 ...
- UltiSnips安装及设置
2022-10-05 10:56:50 星期三 安装了UltiSnips插件,然后开始学习 第一个命令 UltiSnipsEdit 不好使,创建了~/.vim/UltiSnips 还是 can not ...
- @EnableAspectJAutoProxy 注解的作用 —— 转载
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)解决同类方法调用时异步和事务不生效:我们在开启springboo ...
- 【5】python之基础语法
1.编码格式 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 ...
- python 知识点总结
第一张 1)变量 内存空间的表达式 命名要遵守规则 赋值使用 = 2)类型转换 str()将其他类型转成字符窜 int() 将其他类型转成整数 float()将其他类型转成浮点数 3)数据类型 整数类 ...
- Git commit时提示错误时 解决办法
问题描述: * Please tell me who you are. Run git config –global user.email "you@example.com" ...
- oracle内存管理
关于内存管理 必须管理的内存结构是系统全局区(SGA)和实例程序全局区(instance PGA).Oracle 数据库支持各种内存管理方法,这些方法由初始化参数设置选择. 自动内存管理 Oracle ...
- 039_External Data Source(转载)
场景描述:很多时候在实际开发中都会遇到很多数据集成问题,如Salesforce和SAP同步数据.为了让类似问题能方便.快速地解决,Salesforce提供了"外部数据源"这样的工具 ...
- 037_Clone Button
ResolutionTo do this first go to Setup | Customize | Accounts | Buttons and Links | New. Enter the f ...