首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏C++

    C语言(指针7

    4、函数指针数组 在上篇文章中我们又学了一个新的指针类型——函数指针类型,那学了函数指针,你是否还记得我们还学过指针数组呢?指针数组是一个数组,数组元素是相同类型的指针变量。 那我们是不是也可以将相同类型的函数指针变量存到一个指针数组内呢?答案是可以的。 存放函数指针变量的数组就叫做函数指针数组,函数指针数组出现的意义我就不多说了,跟其他类型数组的作用一样。 return 0; } 可以看到,函数指针数组能避免我们需要多个相同函数指针类型变量创建时的繁琐。 回调函数就是一个通过函数指针调用的函数。当我们把一个函数的指针(地址)作为参数传给另一个函数,通过这个指针来调用其所指向的函数时,被调用的函数就是回调函数。

    21910编辑于 2024-10-16
  • 来自专栏技术分享

    指针(7)---*和&的区别

    在C语言中,&和*都是用于操作指针的符号。 & 是取地址运算符,用于获取变量的内存地址。例如,&a表示变量a的地址。 * 是指针运算符,用于获取指针所指向的变量的值,也就是我们常说的解引用。 例如,*ptr表示指针ptr所指向的变量的值。 因此,&和*是互为逆运算的符号,&用于获取变量的地址,*用于获取地址所指向的变量的值。 printf("%zd\n", sizeof(p[0]));//p[0]就相当于 *(p+0) 也就是*p,也就是1个字节 printf("%zd\n", sizeof(&p));//&p也是地址,是指针变量 printf("%zd\n", sizeof(p[0]));//p[0]--> *(p+0) - *p 也就是1个字节 printf("%zd\n", sizeof(&p));//&p也是地址,是指针变量

    43810编辑于 2024-06-18
  • 来自专栏老司机的技术博客

    golang学习笔记7:指针

    不像 Java 和 .NET,Go 语言为程序员提供了控制数据结构的指针的能力;但是,你不能进行指针运算。 ,指针更是不可或缺的一部分。 程序在内存中存储它的值,每个内存块(或字)有一个地址,通常用十六进制数表示,如:0x6b0820 或 0xf84001d7f0。 但是对于经常导致 C 语言内存泄漏继而程序崩溃的指针运算(所谓的指针算法,如: pointer+2 ,移动指针指向字符串的字节数或数组的某个位置)是不被允许的。 另一方面(虽然不太可能),由于一个指针导致的间接引用(一个进程执行了另一个地址),指针的过度频繁使用也会导致性能下降。

    83040发布于 2018-11-07
  • 指针篇(7)- 指针运算笔试题(阿里巴巴)

    结合这个程序的内存布局来讲 这里把int(*)[5]类型的数组指针强制类型转换为int *类型赋值给ptr,因为类型一样才可以赋值,ptr是int *型指针,int *指针减1,向前挪动一个整型 这里结构体类型加了一个*,这是结构体指针类型,结构体指针创建了个变量叫p,p里有地址,0x100000是个整数,把整数赋给结构体指针,要强制类型转换。 第一个printf:指针加减整数与指针类型有关,结构体指针加1跳过一个结构体,一个结构体20个字节,这是16进制,也就是0x100014。只有指针变量+1,才可以说加几个字节。 结合图来看: pa是一个二级指针,char** pa = a相当于把一个一级指针的地址放到二级指针变量里去了,pa++跳过一个char* 的元素,指向第二个元素。 3.7 题目7: 接下来的题目是这一章里最难的一题了 #include <stdio.h> int main() { char* c[] = { "ENTER","NEW","POINT","FIRST

    19710编辑于 2025-12-30
  • 来自专栏EdisonTalk

    你必须知道的指针基础-7.void指针与函数指针

    一、不能动的“地址”—void指针 1.1 void指针初探 ?   void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。 int nums[] = {3,5,6,7,9}; void* ptr1 = nums; //int i = *ptr1; // 对于void指针没法直接取值 int* ptr2 PS:void *就是一个不能动的“地址”,在进行&、移动指针之前必须转型为类型指针。 1.2 void指针的用途 ?    int类型和结构体类型进行调用: int main(int argc, char *argv[]) { // test1:int类型求最大值 int nums[] = { 3,5,8,7,6 int nums[] = { 3,5,8,7,6 }; qsort(nums,sizeof(nums)/sizeof(int),sizeof(int),intDataCompare);

    1.3K20发布于 2018-08-20
  • 来自专栏学习

    C语言新手小白详细教程(7指针指针变量

    开篇说明 本章节我们学习C语言中一个非常重要的概念 指针。在之前的章节,我们已经接触过指针这个概念了,比如scanf()中的地址列表,这就是指针。所以,用一句话总结 指针是什么呢?指针就是地址! 1、指针的定义 指针:就是变量的内存地址。 指针变量就是存放内存地址的变量。(存放指针的变量) 从以上的定义我们可以知道,首先指针是一个值,这个值值指的是内存地址。 而指针变量,和我们之前学过的int型、char型等变量类似,不同的点在于,指针变量存储的是内存地址(指针),int型变量存储的是整型数据,char型变量存储的是字符型数据。 申明格式: 数据类型 * 指针变量名称; 申明存储int型变量地址的指针变量 int * i_pointer;// i_porinter 是指向 int 型变量的指针 申明存储char型变量地址的指针变量 指针变量&i的值是变量i在内存中的地址,指针变量i_pointer的值也是变量i在内存中的地址,所以: int * i_pointer; i_pointer == &i; 4、为指针变量赋值 指针变量存储的是内存地址

    59110编辑于 2024-11-25
  • 来自专栏想到什么就分享

    C++基础入门丨7. 指针——一文搞懂指针

    指针和数组 7 指针和函数 8 指针、函数、数组 1 什么是指针 我们知道每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。 > using namespace std; int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int* p = arr; //指向数组的指针 ; i++) { //利用指针遍历数组 cout << *p << endl; p++; } system("pause"); return 0; } 7 指针和函数 作用:利用指针作函数参数 #include<iostream> using namespace std; //1、定义一个数组,数组中的元素可以自由添加 int arr[] = { 3,5,1,7,4,9,0,6,2,8,15,12,14,13,11 << " "; } system("pause"); return 0; } Reference [1]:https://www.bilibili.com/video/BV1VJ411M7WR

    81330编辑于 2023-03-07
  • 来自专栏DL

    指针终极挑战(5):这7道题能全对,指针就算真懂了!

    指针是C语言的灵魂,也是无数程序员的噩梦。今天带来7道经典指针题目,能全部答对的话,你的指针功底就算真正过关了! 前言:为什么指针如此重要? 指针是C语言最强大的特性,也是最具挑战性的概念。 printf("%d\n", strlen(&arr)); &arr 的类型是 char (*)[7](指向整个数组的指针),但其值与 arr(char*)相同,都指向内存块的起始位置。 printf("%d\n", strlen(&arr + 1)); &arr 是数组指针,&arr + 1 会跳过整个 arr 数组(7个字节)。 本关的三道题目将带你进入指针的核心地带,理解指针类型如何影响运算结果,以及多级指针如何在不同抽象层次上操作数据。这是区分指针新手和高手的关键分水岭。 故结果为(x86): 题目7:三级指针的终极挑战 int main() { char* c[] = { "ENTER","NEW","POINT","FIRST" }; char** cp[]

    18710编辑于 2025-12-23
  • 来自专栏蒙奇D索隆的学习笔记

    计算机初级选手的成长历程——指针7

    进阶指针 导言 大家好,很高兴又和大家见面啦! 在结束了数组指针的学习后,我相信大家对指针与数组的内容应该有了更进一步的认识了。 ; 对不同类型的指针命名是字符指针、整型指针、浮点型指针、数组指针……这些指针的前半部分就说明了指针指向的对象; 根据这个命名特点,我们不难得出函数指针变量即函数指针,它指向的对象应该是一个函数。 此时指向函数的指针我们将其称之为函数指针变量,简称函数指针。 我们应该如何创建一个函数指针呢? ; 当只有返回类型、指针标志以及参数类型时,这代表的是函数指针的数据类型; 根据函数指针的创建格式,我们就可以来创建一下函数指针了: //函数指针的创建 int main() { //无返回类型函数指针 ——无返回类型的函数指针、字符型的函数指针以及指针型的函数指针

    32210编辑于 2023-12-18
  • 来自专栏C++

    指针+数组指针+字符指针+指针数组

    指针 指针作为C语言的核心部分,相比较其他的内容相对比较难懂一下,应用的方式多样,变化较多,导致很多的同学非常苦恼,那么接下来,我将陪你来共同揭开指针的神秘面纱; 指针的含义 大家不要把指针想的太难,指针其实就是通过地址找到对应的变量的位置 ,然后我们可以对地址进行解引用来访问变量的内存,来获取值的一种间接方法;我们通常说指针指向哪里哪里,就是指针变量里面存的其他变量(或者常量)的地址;即  指针->地址->内存; 普通变量指针 首先,我们现来看看指针的构成以及表达形式 ; 数组指针 数值指针,其主体是指针,他就是个指针,不过是有点不同而已,这个指针指向的是数组的地址,在此之前我们需要了解数组的地址; 数组的地址; 我们通常说数组的地址是数组名,是数组的首元素地址,也确实是这样 字符指针 含义 字符指针就是指针指向了字符或者字符串,因为字符串可以看成是一个字符数组,所以字符串指针与数组指针大致可以类比; 字符指针打印字符串 这里我使用了三种打印字符串的方式,从结果上看,很明显打出来的字符串都是相同的 指针数组 含义 指针数组,主体是数组,不同的是里面存的是指针,是地址; 指针数组打印二维数组 值得注意的是指针数组的[]前面的*p是没有括号的,我们可以这样看,他是一个数组,数组名是p,数组元素个数是3

    85710编辑于 2024-11-19
  • 来自专栏C++核心编程

    CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针

    普通变量和指针变量 共性 PS: 可见这4个函数的汇编指令完全一致,无论是什么类型的指针变量,对指针变量的读写跟普通变量没有任何区别,所谓的指向只是描述指针变量的值时多少而已,就读写而言,指针变量跟普通变量没有任何区别 空指针和野指针指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。 空指针:空指针不是指向常数0,只指向地址0,即NULL,其实换句话说,指针的本质就是地址嘛,空指针就是指针本身的值(地址)为0空指针的作用是防止野指针的出现,因为我们不能知道野指针到底指向哪里,所以我们也无法判断一个指针是否是野指针 指针变量的+-运算 指针变量的加减运算:也就是做地址偏移,不同 的指针类型偏移的步长不同。 图片 图片 PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针的数组,后者是指向数组的指针

    2.5K30编辑于 2023-03-21
  • 来自专栏C++核心编程

    CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针

    普通变量和指针变量 共性 PS: 可见这4个函数的汇编指令完全一致,无论是什么类型的指针变量,对指针变量的读写跟普通变量没有任何区别,所谓的指向只是描述指针变量的值时多少而已,就读写而言,指针变量跟普通变量没有任何区别 空指针和野指针指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。 空指针:空指针不是指向常数0,只指向地址0,即NULL,其实换句话说,指针的本质就是地址嘛,空指针就是指针本身的值(地址)为0空指针的作用是防止野指针的出现,因为我们不能知道野指针到底指向哪里,所以我们也无法判断一个指针是否是野指针 PS: 区分指针数组int *a[3]和数组指针int (*a)[3],前者时存放指针的数组,后者是指向数组的指针。 这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

    2.5K20编辑于 2022-10-04
  • 来自专栏可涵的从小白到大牛的征程

    指针进阶(1)(字符指针指针数组,数组指针,函数指针

    前言: 本文主要讲解指针进阶部分的内容,分为字符指针指针数组,数组指针,函数指针。 int *arr[5];//存放整型地址的指针数组 char *arr[6];//存放字符类型的指针数组 数组指针 概念辨析 我们类比一下: 整型指针:指向整型变量的指针,存放整型变量的地址的指针。 数组指针:指向数组的指针,存放数组地址的指针。 [3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 }; print(arr, 3, 5);//二维数组传参表示二维数组第一行的地址 return 0; } 二维数组的传参 数组接受时,行可以省略,但是列不能 指针接收,必须用数组指针来接收。 函数指针 函数指针就是指向函数的指针

    75210编辑于 2024-10-16
  • 来自专栏叶子的开发者社区

    数组指针指针指针

    概念 我们把指向数组的指针叫做数组指针,后面还会学到指针数组,这两个是不一样的,根据中学语文偏正词组的知识可以知道,前者是指针,后者是数组。 注意:二维数组名a不可以赋值给一般指针变量p,只能赋值给二维数组的行指针变量。 行指针变量 行地址和列地址 先看一个代码。 行指针是一种特殊的指针变量,专门指向一维数组。 行指针定义: int a[2][3]; int (*p)[3]; 不可写成 int (*p)[2],因为二维数组a每行有四个元素。 不可写成 int *p[4],此为指针数组的定义。 : p=a[0]; 或: p=*a; 或: p=&a[0][0]; 用法同一般指针变量。

    86010编辑于 2023-07-28
  • 来自专栏学习

    7.《双指针篇》---⑦三数之和(中等偏难)

    题目传送门 方法一:双指针 1.新建一个顺序表用来返回结果。并排序数组。 2.for循环 i 从第一个数组元素遍历到倒数第三个数。 3.如果遍历过程中有值大于0的则break; 4.定义左右指针,以及target。 注意: 排重的时候双指针排重记得 left < right。并且num【i】排重的时候注意 i<n-1。

    20000编辑于 2024-11-21
  • 来自专栏叶子的开发者社区

    const 指针 常量指针 指针常量 常量指针常量

    常量指针:指向常量的指针指针定义语句的类型前加const,表示该指针指向一个常量。 const int a=666; const int * p=&a; 常量a只能被访问而不能被改写,但指向常量a的常量指针可以改写。 指针常量 在指针定义语句的指针名前加const,表示该指针是常量。 int a; int * const p=&a; 指针常量在定义时必须初始化,且不允许修改,但其指向的地址的值可以修改,即p不可改写而*p可以改写。 常量指针常量:指向常量的指针常量 在定义时必须初始化。 const int a=666; const int * const p=&a; 很简单,p和*p都不能改写。

    74310编辑于 2023-07-28
  • 来自专栏走在努力路上的自己

    初识指针指针指针变量、如何理解地址、指针类型的意义、void*指针、野指针、空指针)(笔记)

    解引用 return 0; } 二、指针指针变量 指针:地址 指针变量:变量-存放地址 指针变量用来存放地址的,指针变量并不完全等同指针 四、指针类型的意义(为什么不用ptr_t p代表所有指针) 1.指针解引用的时候有多大权限 (如果一个指针代替所有的话,解引用时的字节与变量定义类型不同) 2.指针类型决定了指针向前或向后走一步有多大 指针未初始化 2.指针越界访问造成野指针 3.指针指向的空间释放 1. 1.指针初始化 如果明确知道指针指向哪里就直接赋值地址,如果不知道指针应该指向哪里, 可以给指针赋值NULL。 七、空指针指针是一个特殊的数据类型,它的值定义为NULL。空指针不同于NULL的整数表示,它是一个指针变量的特殊值,表示该指针变量不指向任何有效的内存地址。

    1.2K10编辑于 2024-01-26
  • 来自专栏从小白开始修炼

    【C语言】指针进阶:字符指针&&数组指针&&函数指针

    指针数组 数组指针 &数组名 与 数组名 数组指针的使用 数组传参、指针参数 一维数组传参 二维数组传参 一级指针传参 二级指针传参 函数指针 结语 前言 回想之前,我们学了指针的一些基础 指针与结构体 指针的大小是固定的4/8个字节(32位平台/64位平台)。 指针是有类型,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限。 指针的运算。 #include <stdio.h> int main() { int arr[10] = {1,2,3,4,5,6,7,8,9,0}; int (*p)[10] = &arr;//把数组 printf("%d ", arr[i][j]); } printf("\n"); } } int main() { int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 i<sz; i++) { printf("%d\n", *(p+i)); } } int main() { int arr[10] = {1,2,3,4,5,6,7,8,9

    4K20编辑于 2022-11-15
  • 来自专栏米扑专栏

    指针数组与指向指针指针

    指针数组与指向指针指针 http://wlkc.gdqy.edu.cn/jpkc/portal/blob? key=173314 指针数组和数组指针的区别 http://allew.blog.163.com/blog/static/3374389720094148449239/ 指针数组[组图] http:/ /school.cnd8.com/c/jiaocheng/9212.htm 函数指针指针函数 http://lionwq.spaces.eepw.com.cn/articles/article/item am glad to meet you str2: Welcome to study C Welcome to study C ================================= 函数指针 scanf("%d %d", &a, &b); f = max; //给函数指针f赋值,使它指向函数max m = (*f)(a, b); //通过函数指针f调用函数

    3K40发布于 2019-02-19
  • 来自专栏学习

    什么是 字符指针? 数组指针? 函数指针? 函数指针数组?

    数组指针变量 1. 数组指针变量是什么? 答案是:指针变量 我们已经熟悉: • 整形指针变量: int * pint; 存放的是整形变量的地址,能够指向整形数据的指针。 i][j]); } printf("\n"); } } int main() { int arr[3][5] = {{1,2,3,4,5}, {2,3,4,5,6},{3,4,5,6,7} 解引用即一维数组里面的一个元素 } printf("\n"); } } int main() { int arr[3][5] = {{1,2,3,4,5}, {2,3,4,5,6},{3,4,5,6,7} , int time) { int i, j, tmp; int len = strlen(src); time %= len; //长度为5的情况下,旋转6、11、16...次相当于1次,7、 、数组指针、函数指针以及函数指针数组都是指针的不同应用形式,它们在C语言中具有重要的地位。

    68410编辑于 2024-10-16
领券