首页 > 其他分享 >09_指针提高

09_指针提高

时间:2023-07-24 14:56:56浏览次数:31  
标签:arr 变量 int 提高 09 地址 函数指针 指针

指针提高

二维数组详解

image-20230720185011177

int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
arr ===> 二维数组第0行地址 ===> arr[0]
arr+1 ===> 二维数组第一行地址 ===> arr[1]
*(arr) ===> 第0行第0列地址 ===> arr[0][0]
*(arr+1)+1 ===> 第1行第1列地址 ===> arr[1][1]
arr[0] ===> *(arr+0) ===> 第0行地址的值 ===> 第0行第0列地址
&arr[0] ===> &*(arr+0) ===> 第0行地址的值的地址 ===> 第0行地址
**arr ===> arr[0][0]值

image-20230721165312994

image-20230721175022740

指针变量做函数参数

如果想在函数内部修改外部变量的值 需要将外部变量的地址传入函数

image-20230721180922907

数组名作为函数参数

数组作为函数的形参,会被编译器优化为指针变量

int arr[] = {10, 20, 30, 40};
printf("%d\n", sizeof(arr)); //16
fun (arr);
void fun(int arr[]){ //int arr[] ===> int *p
    printf("%d\n", sizeof(arr)); //8
}

函数的返回值类型为指针类型

将函数内部局部变量通过返回值返回给外部使用

image-20230722214546871

函数的内部局部变量运行完后释放掉了,所以会报段错误,解决办法是加static关键字

image-20230722214807753

p *p &p 区别

image-20230723153242695

p: 一个指针变量的名字,表示此指针变量指向内容的地址

*p: 表示此指针变量指向内容的地址的内容

&P: 指针变量自身的地址

使用双重指针修改变量值

image-20230723155343139

函数指针

函数名 代表函数的入口地址

函数指针: 本质是一个指针变量 只是该变量保存的是函数的入口地址

image-20230723160745501

函数指针变量注意:

​ 函数指针变量不要+1 无意义

​ 不要对函数指针变量取* 无意义

typedef 取别名

typedef int (* FUN_TYPE)(int x, int y); //函数指针类型
FUN_TYPE p = my_add;

由地址找到函数

image-20230723162324539

函数指针 作为函数的参数

my_calc完成加减乘除

int add(int x, int y)
{
    return x + y;
}

int sub(int x, int y)
{
    return x + y;
}

int mul(int x, int y)
{
    return x + y;
}

int div(int x, int y)
{
    return x + y;
}

//设计算法,完成加减乘除
int my_calc(int d1, int d2, int (* func)(int, int))
{
    return func(d1, d2);
}

int main(int argc, char const *argv[])
{
    printf("%d\n", my_calc(1 ,2 ,add));
    return 0;
}

标签:arr,变量,int,提高,09,地址,函数指针,指针
From: https://www.cnblogs.com/mzx233/p/17577226.html

相关文章

  • C语言指针的常见问题
    1值传递下面看一个列子,student结构体中包含该学生的各种信息,我们在change函数中对其进行部分修改,再在主函数中输出其结果#include<stdio.h>#include<string.h>#defineformat"%d\n%s\n%f\n%f\n%f\n"structstudent{intnum;charname[20];floatscore[3]......
  • 11.数组名和指针(这⾥为指向数组⾸元素的指针)区别
    1intmain()2{3inta[2]={1,2};4int*p=a;5cout<<"a+1"<<a+1<<endl;6cout<<"p+1"<<p+1<<endl;7cout<<"*(a+1)"<<*(a+1......
  • leetcode第109场双周赛
    题目传送门6931.访问数组中的位置使分数最大题意给你一个数组,初始你位于下标1处,你可以往后跳到数组任一下标,但不能往前跳。跳到哪个位置,即可获得下标对应的分数,但如果当前下标的数与跳之前下标的数奇偶性不同,那么你会失去分数x。询问你能获得的最大分数?思路一眼动态规划,......
  • spartan-6 ax309学习日记合集1
    一、环境安装配置两个开发环境ISE和modelsim,我安装的是ISE14.7(最新版,不再更新,由于Spartan-7及以上才可以使用vivado,故只能使用ISE)和modelsim10.1c(注意一定有c)二、流水灯程序编写学习因为我没有verilog基础,并且是初次接触FPGA开发板,没找到直接的教程,故开始打算先学一点verilog......
  • Python爬虫实战之提高CSDN访问量
    python爬虫之建立代理池(一)_CodingInCV的博客-CSDN博客python爬虫之建立代理池(二)_CodingInCV的博客-CSDN博客前面2篇分别介绍了从2个免费代理网站爬取免费代理来构建我们自己的代理池。这一篇我们从实战的角度来将我们的代理池用起来,通过代理的方式访问我们的CSDN博客(CSDN会认为......
  • P5095 [USACO12OPEN] Bookshelf S
    P5095[USACO12OPEN]BookshelfS目录P5095[USACO12OPEN]BookshelfS题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示思路赛时code别人code题目描述FarmerJohn闲来无事的时候总喜欢坐下来看书。这些年来,他一共收集了\(N\)本书(\(1\leqN\leq2000\)),他打算......
  • leetcode第 109 场双周赛
    6930.检查数组是否是好的-力扣(LeetCode)首先判断数组长度是不是最大值+1,然后排个序,判断0到n-2是不是都是1到最大值的一个排列,满足这些返回true就行了classSolution{public:boolisGood(vector<int>&num){intma=0;for(autoi:num){......
  • 《Kali渗透基础》09. 漏洞利用、后渗透
    目录1:漏洞基本介绍1.1:漏洞从哪里来1.2:缓冲区溢出1.3:如何发现漏洞2:漏洞利用2.1:EXP选择与修改2.2:避免有害的EXP3:后渗透阶段3.1:Linux上传文件3.2:Windows上传文件本系列侧重方法论,各工具只是实现目标的载体。命令与工具只做简单介绍,其使用另见《安全工具录》。本文以kali-......
  • 读数据压缩入门笔记09_多媒体数据压缩
    1. 压缩分类1.1. 多媒体数据压缩(media-specificcompression)1.2. 通用压缩(generalpurposecompression)2. 有损压缩算法2.1. 为了使数据压缩得更小,可以牺牲多媒体的质量这样的数据转换2.2. 针对特定的多媒体文件2.2.1. 针对图像文件的算法就不太适用于音频文件2.3.......
  • mysql 1709
    实现"mysql1709"的流程为了实现"mysql1709",我们需要按照以下步骤进行操作:步骤操作1下载并安装MySQL2启动MySQL服务器3创建数据库4创建数据表5插入数据6查询数据现在让我们逐步学习每个步骤需要做什么,以及使用的代码。1.下载并安装MySQ......