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

    C语言(指针5

    8、字符指针 类似于整型指针,字符指针我们并不会感到陌生,因为用法跟整型指针很像: 下面介绍一个不一样的用法: 上面的两个指针变量pa和pc有什么区别呢? 9、数组指针 9.1数组指针的创建 前面说了指针数组,这里再来了解一下数组指针。 我们知道指针的类型取决于它所指对象的类型,比如整型指针指向的是整型所以整型指针的类型为 :int *,字符指针指向的是字符所以字符指针的类型为: char *,那同样的数组指针指向的是数组所以数组指针的类型就应该为 9.2数组指针指向指针数组 说到这里又有一个问题需要我们思考,数组指针是存放数组地址的指针,那指针数组也是数组啊,将指针数组的地址存到数组指针内该如何存呢? 上面我们打印二维数组的时候形参写的是数组的形式,那指针的形式怎么写呢?写指针的形式前先要弄清楚这个指针的类型,指针的类型取决于指针指向对象的类型。

    22010编辑于 2024-10-16
  • 【C语言】指针(5)

    < sz;i++) { printf("%d ", *(P_arr + i)); } } //排整型的数组 int test1() { int arr1[10] = { 1,4,3,2,6,5,8,7,9,10 上面诸多地方提到了void*指针,下面我们给出解释: 在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为无具体类型的指针(或者叫泛型指 针),这种类型的指针可以用来接受任意类型地址。 但是也有局限性, void*类型的指针不能直接进行指针的±整数和解引用的运算。 ; for(i=0;i<sz;i++) { printf("%d ",arr[i]); } printf("\n"); } void test() { int arr[10]={1,3,5,7,9,2,4,6,8,0 j * width, (char*)base + (j + 1) * width,width); } } } } void test2() { int arr[10] = { 1,3,5,7,9,2,4,6,8,0

    26100编辑于 2025-12-23
  • C语言——指针5

    指针运算题目解析 1. 题目一: #include <stdio.h> int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); // &a取出的是整个数组类型是int(*)[5],&a+1类型也是int(*)[5],所以要强制类型转换为int(*) printf( "%d,%d", *(a + 1), *(ptr - 1)); return cha[2]; short sBa[4]; }*p = (struct Test*)0x100000; int main() { printf("%p\n", p + 0x1); // p是结构体指针 return 0; } 运行结果: 10   5 6.

    18210编辑于 2025-10-13
  • 来自专栏C++初阶高阶

    C语言初阶---指针5

    15.回调函数 回调函数就是一个通过函数指针调用的函数。 calc(Sub); break; case 3: calc(Mul); break; case 4: calc(Div); break; case 5: #include<stdio.h> #include<stdlib.h> //void* 类型的指针是无具体类型的指针,这种类型的指针不能直接解引用,也不能进行+-整数 的运算 int cmp_int //写一段代码使用qsort排序结构体的数据 #include<stdio.h> #include<stdlib.h> #include<string.h> //void* 类型的指针是无具体类型的指针 //写一段代码使用qsort排序结构体的数据 #include<stdio.h> #include<stdlib.h> #include<string.h> //void* 类型的指针是无具体类型的指针

    21710编辑于 2025-10-22
  • 来自专栏Initial programming

    初识C语言·指针5

    3 指针运算题目详解 题目1: int main() { int arr[5] = { 1,2,3,4,5 }; int* pa = (int*)(&arr + 1); printf("%d,&d 那么arr + 1 指向的是第二个元素,然后解引用得到2,pa - 1指向的是5最后的一块空间,运算之后解引用得到的就是5。 题目4: int main() { int arr[2][5] = { 1,2,3,4,5,6,7,8,9,10 }; int* p1 = (int*)(&arr + 1); int* p2 = arr + 1表示的是取出整个第一行的地址+1进行指针运算,得到的是整个第二行的地址,那么低地址位就是6,打印的时候- 1在解引用,指向的位置就是5的位置,所以打印的结果就是5。 我们创建了一个字符指针数组,存放的四个首元素地址分别是E N P F的地址,又创建了一个二级指针数组,存放的是一级字符指针数组进行运算后的地址,分别是F P N E的地址,最后创建了一个三级指针,指向的是二级指针的地址

    26610编辑于 2024-10-16
  • 来自专栏编程学习之路

    指针5)(含大量题目)

    char  (*)[5]能隐式转换为 char *,char*再隐式转换为const char *。(char (*)[5]能隐式转换为 const char *,分两步更好理解)。   所以我们这能得出char数组指针能隐式转换为char指针。对于其他类型也相同,前提是两者基本类型要相同,都要为char。 至于无const隐式转换为有const,我们都知道。 第五题   该题很简单,一个为10,一个为5. 第六题   其实不难,但这里还要额外说的一点还是%s的占位符本质。 总结  指针5基本上都是题目,在做题目时我们还总结了一些知识点,比如知道了多个占位符的作用,%s,%p,%x,%d到底本质是怎么作用的。还又了解了一些隐式转换。 所以指针5)就到这里了。指针这一大篇就通过五大节结束了。  我们之后学习字符函数和字符串函数。

    23310编辑于 2024-04-08
  • 来自专栏技术分享

    指针(5)---回调函数

    回调函数的含义 回调函数通常作为参数传递给其他函数,它是一个通过函数指针调用的函数。简单来说这个函数的作用就是用来在特殊的条件满足时用来调用其他函数的一个函数。 printf("输⼊操作数:"); scanf("%d %d", &x, &y); ret = pf(x, y); printf("ret = %d\n", ret); } 它使用了一个基于函数指针数组的函数

    29110编辑于 2024-06-18
  • 深入理解指针5

    1、 printf("%d\n", sizeof(p));//p是一个指针变量,一个指针变量大小是4/8。 3.指针运算笔试题解析 3.1 题⽬1 #include <stdio.h> int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int ,根据我们前面所学习的内容,可以快速反应出这是个逗号表达式,整个表达式的结果是最后一个表达式的结果,所以二维数组中的内容应该是{1,3,5} 指针p中存放的是二维数组第一行的数组名,数组名又表示一维数组首元素的地址 ][2], &p[4][2] - &a[4][2]); return 0; } a[5][5]是一个55列的二维数组,int (*p)[4] 是一个数组指针,存放的是数组的地址,数组指针的类型是int (*)[4],这里面的4表示数组中有4个元素,|指针-指针| 的结果是两个指针之间的元素个数,所以printf("%d",&p[4][2] - &a[4][2])的结果是-4;

    22110编辑于 2025-12-30
  • 来自专栏生活不止眼前的代码

    SpringCloudGateway笔记(5)-netty空指针问题

    netty-transport-4.1.24.Final.jar:4.1.24.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$5.

    1.8K20发布于 2019-08-30
  • 来自专栏学习

    C语言----深入理解指针5

    //p存的是a的地址,因为p是char*的指针,那么p+1就是指向b的地址 //就是从b的地址位置开始统计这个字符串的个数 //那么得到的数据就是5 printf( //&p是指针p的地址,+1就是跳过p的地址,开始进行统计 //所以数据就是随机值 printf("%zd\n", strlen(&p[0] + 1));//5 // #include <stdio.h> int main() { int a[5][5];//55列 //每一行的数组名分别是a[0]、a[1]、a[2]、a[3]、a[4] //第一行的地址的类型就是一个数组指针int(*)[5] //p的类型是int(*)[4] a的类型是int(*)[5] //不管a原来是什么类型,现在赋值给p,那么现在就是p说的算 ,数组指针+1跳过的是多少 //就是跳过一个指针类型,在这里p+1就是跳过一行  题目五 #include <stdio.h> int main() { int aa[2][5] = { 1,

    37110编辑于 2024-09-23
  • 来自专栏mathor

    枚举+优化(5)——双指针优化1

    从上面的代码我们能看出时间复杂度是O(N^2^) 双指针优化  在某些情况下,根据题目要求,j下标并不需要从i+1重新往后枚举一遍,而是跟随着i向后移动,j也向后移动 ?   ,x + k - 1) return x + k - 1  以题目样例为例,由于k=5,现有最大整数是13。 Hashtable.find(i) need_card++; return need_card <= M  这样整个算法的时间复杂度是O(PK),P是这个数组的最大值,所以有可能有10^8^这么大,K最大10^5^ 我们利用双指针可以把这一步均摊时间复杂度降到O(1)。首先我们对A数组排序,然后对于每一个A[i],我们还是找一个“最优的A[j]”。 上图是样例每个Ai对应的最优A[j(绿色箭头)],可以看出当A[i]从大到小枚举的过程中,A[j]也是从大到小改变,不会变大,所以这个双指针枚举的复杂度是O(N)  对于每个A[i],当我们求出最优的

    69130发布于 2018-06-19
  • 来自专栏C\C++

    《彻底理解C语言指针全攻略(5)--指针和函数专题》

    一、函数指针变量 4.1 函数指针变量的创建 函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。 如果我们要将函数的地址存放起来,就得创建函数指针变量咯,函数指针变量的写法其实和数组指针非常类似。 () { int(*pf3)(int, int) = Add; printf("%d\n", (*pf3)(2, 3)); //方式一 printf("%d\n", pf3(3, 5)); // 数组指针类型重命名 例: typedef int(*parr_t)[5]; //新的类型名必须在*的右边 2.4函数指针类型的重命名 例: typedef void(*pfun_t)(int);//新的类型名必须在 return x * y; } int div(int x, int y) { return x / y; } int main() { int x, y; int input; int(*p[5]

    23310编辑于 2025-12-15
  • 来自专栏Bingo的深度学习杂货店

    【DP、双指针5. Longest Palindromic Substring

    Example 2: Input: "cbbd" Output: "bb" 解题思路: 找一个字符串的最长回文子串,可以使用双指针法和动态规划法。 Python3 实现: 1、双指针法: class Solution: # 方法1:分奇回文串和偶回文串 def longestPalindrome(self, s: str) -> str

    72830发布于 2019-06-13
  • 来自专栏布衣者博客

    LeetCode-算法-双指针-第5

    while t<n//2: t+=1 ans=ans.next return ans 思路:这是我第一开始的思路,并没用用到双指针 ,通过while进行一次遍历统计列表的长度,在通过第二次while循环找出中心点指针。 fast.next: slow=slow.next fast=fast.next.next return slow 思路:这个思路是双指针中的快慢指针 ,fast指针每前进两步,slow指针前进一步,这样当fast指针结束时,slow指针也将达到中心位置。 nil{ slow=slow.Next fast=fast.Next.Next } return slow } 思路:参考第二个python思路,也是快慢指针

    35820发布于 2021-09-07
  • 来自专栏DL

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

    结果:5。它统计了从 'b' 到 'f' 这5个字符。 结果展示: 符合预期!下一关GO 第二关:数组名的真正身份 本关简介:数组名在C语言中有着多重身份,时而代表整个数组,时而退化为指针。 &a 的类型是 int (*)[5] —— 指向整个数组的指针。与之相比,a(在大多数表达式中)会退化为 int *,指向第 0 个元素(&a[0])。 &a + 1:对 &a 做指针加法。 因为 &a 的类型是指向 int[5] 的指针,所以 &a + 1 会跳过整个数组的字节数,即地址增加 sizeof(int[5]) = 5 * sizeof(int)。结果是 数组的末尾之后的地址。 现在该指针指向“数组最后一个元素之后的位置”(即 a + 5)。因此 (int*)(&a + 1) 与 a + 5 是等价的指针值(类型不同但地址相同)。 *(ptr - 1): ptr 是 a + 5,ptr - 1 就是 a + 4,解引用即得到 a[4],值为 5。 因此 printf 会输出 2,5

    18710编辑于 2025-12-23
  • 来自专栏猿人谷

    C语言指针5分钟教程

    指针、引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量。在这份教程里“引用”表示计算机内存地址。从指针指向的内 存读取数据称作指针的取值。 1 2 3 4 5 6 7 8 9 // 声明一个int指针 int *ptr; // 声明一个int值 int val = 1; // 为指针分配一个int值的引用 ptr = &val; // 对指针进行取值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 int *uninit; // int指针未初始化 int *nullptr = 1 2 3 4 5 6 7 8 int myarray[4] = {1,2,3,0}; int *ptr = myarray; printf("*ptr=%d\n", *ptr);   // 数组变量是常量 1 2 3 4 5 6 7 8 9 10 11 12 13 struct person {   int age;   char *name; }; struct person first; struct

    1.4K50发布于 2018-01-17
  • 来自专栏EdisonTalk

    你必须知道的指针基础-5.指针的几个小应用案例

    一、使用指针传出分解后的数字   实现一个方法“多个返回值”的效果:返回一个三位数数字的个位、十位、百位。这里,我们借助指针来”返回“分解后的结果。这种应用也是最常见的指针应用。 这里,我们来自己实现一个strlen函数,利用指针的移动来辅助计算长度,这也是指针的一个最常见的应用。 = '\0') { str++; len++; } return len; }   测试字符串为”hello“,长度为5,Main函数声明如下: 这里,我们借助指针来辅助实现这个经典的endsWith方法。

    47540发布于 2018-08-20
  • c语言指针学习心得与分享(5

    7.指向函数指针数组的指针 指向函数指针数组的指针是一个指针指针指向一个数组,数组的元素都是函数指针; void test(const char* str) { printf("%s\n",str pfunArr[5])(const char* str); pfunArr[0]=test; //指向函数指针数组pfunArr的指针PPfunArr void(*(*ppfunArr )[5])(const char*)=&pfunArr; return 0; } 8.回调函数 回调函数就是一个通过函数指针调用的函数。 , const void * p2) { return (*( int *)p1 - *(int *) p2); } int main() { int arr[] = { 1, 3, 5, return strcmp(((struct Stu*)e1)->name,((struct Stu*)e2)->name); } int main() { int arr[] = { 1, 3, 5,

    17110编辑于 2026-02-02
  • 来自专栏C++

    C语言基础:(十五)深入理解指针5

    回调函数就是一个通过函数指针调用的函数。 如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。 因为下面的代码,只有调用函数的逻辑是有差异的,我们可以把调用的函数地址以参数的形式传递过去,使用函数指针接收,函数指针指向什么函数就调用什么函数,这里其实使用的就是回调函数的功能。 const void * p2) { return (*( int *)p1 - *(int *) p2); } int main() { int arr[] = { 1, 3, 5, *)base + (j + 1)*size,size); } } } } int main() { int arr[] = { 1, 3, 5, 下期更新指针部分的最后一期啦!

    14010编辑于 2026-01-14
  • 来自专栏C++

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

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

    85810编辑于 2024-11-19
领券