C语言的多级指针你了解吗

目录
  • 前言
  • 一、多级指针概念
  • 二、多级指针的使用
    • 1.二维指针
  • 总结

前言

自学笔记,没有历史知识铺垫(省略百度部分)C语言了解多级指针的使用

一、多级指针概念

指向指针的指针
即:存放地址的地址
int **p;

多级指针可以将内存上毫无关系的多组数据,产生关系(线性操作数据)

二、多级指针的使用

1.二维指针

二维指针示例,此处以系统入口main函数示例1 通过argc提供的数量做循环

int main(int argc,char **argv)
{
    for (int i = 0; i < argc; i++)
    {
            printf("argv[%d]=%s \n",i,argv[i]);
    }
    return 0;
}
$ gcc -o main main.c
$ ./main staging myname mypassword
argv[0]=./main
argv[1]=staging
argv[2]=myname
argv[3]=mypassword

main函数中读取传入的二维指针示例2 仅通过二维指针做判断

int main(int argc,char **argv)
{
    int i = 0;
    while (argv[i]!=NULL)
    {
       printf("argv[%d]=%s \n",i,argv[i]);
       i++;
    }
    return 0;
}

可以使用NULL或者0x0作为多级指针是否读取完毕的标识,效果一致

$ gcc -o main main.c
$ ./main staging myname mypassword
argv[0]=./main
argv[1]=staging
argv[2]=myname
argv[3]=mypassword

二维指针的创建

int main()
{
    char **a;
    char a1 = 1;
    char a2 = 2;
    char a3 = 3;
    a[0] = &a1;
    a[1] = &a2;
    a[2] = &a3;
    //a[0]:1,a[1]:2,a[2]:3
    printf("a[0]:%d,a[1]:%d,a[2]:%d", a[0][0], *a[1], *a[2]);
    return 0;
}
    char *a[5];
    char a1 = 1;
    char a2 = 2;
    char a3 = 3;
    a[0] = &a1;
    a[1] = &a2;
    a[2] = &a3;
    //a[0]:1,a[1]:2,a[2]:3
    printf("a[0]:%d,a[1]:%d,a[2]:%d", a[0][0], *a[1], *a[2]);
    return 0;

以上两种方案效果一致

注意:

二维指针与数组的概念非常类似,如上char **a;和char a[]的作用相似二维指针的读取方法a[0][0]或者*a[0]都可以,前者是二维指针下标,a[0]等同于*a

总结

本章主要为C语言了解多级指针的使用

(0)

相关推荐

  • 深入了解C语言指针

    目录 指针是什么? 指针和指针类型 指针运算 总结 指针是什么? 总结:指针就是个变量,变量里面是地址,指针就是地址.(存放在指针的值都被当成地址处理). 注:指针的大小在32位平台是4个字节,在64位平台是8个字节. 指针和指针类型 通过前面的知识我们知道,变量有不同的类型,如:整形,浮点型等. 同理:指针也有不同的类型. **指针的定义方式: 变量类型 + * 比如: int * pi=NULL char * pc=NULL short * ps=NULL long *pl=NULL flo

  • C语言的数组与指针你了解吗

    目录 前言 一.数组的定义 二.数组空间的初始化 1. char数组赋值 2.char数组硬件开发规范 二.数组与指针 总结 前言 自学笔记,没有历史知识铺垫(省略百度部分)C语言数组的概念及使用 一.数组的定义 char a[n]; 注意:数组与指针非常相似 二者的区别: 数组为常量,约定禁止二次赋值,即数组不应该出现在=左侧,如:a="HelloWorld";数组在声明时,会申请一段连续的内存空间,指针不会数组元素为变量,标记可以修改指向任意内存(实际上会copy右侧变量/常量到左

  • C语言函数的参数使用指针

    在c语言中实参和形参之间的数据传输是单向的"值传递"方式,也就是实参可以影响形参,而形参不能影响实参.指针变量作为参数也不例外,但是可以改变实参指针变量所指向的变量的值. #include <stdio.h> void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py); int main(void) { int a=1,b=2; int *pa=&a,*pb=&b; swap1(

  • C语言结构体指针案例解析

    写结构体指针前,先说一下 . 号和 -> 的区别 记得当初刚学C语言的时候,搞不清结构体的 . 号和 -> ,经常混淆二者的使用. 那么在C语言中 . 号是成员访问运算符,当我们需要访问结构的成员的时候,就会使用到它 而当我们需要使用结构体指针来访问结构成员的时候,就得使用->运算符了. 结构体指针栗子: ​#include<stdio.h> #include<string.h> typedef struct student{ int id; char name[

  • C语言指针数组案例详解

    指针与数组是 C 语言中很重要的两个概念,它们之间有着密切的关系,利用这种 关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之 间的联系及在编程中的应用. 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组.如: char str[20], *ptr; ptr=str; ptr 被置为数组 str 的第一个元素的地址,因为数组名就是该数组的首地址, 也是数组第一个元素的地址.此时可以认为指针 ptr 就是数组 str(反之不成立), 这样原来对数

  • C语言的多级指针你了解吗

    目录 前言 一.多级指针概念 二.多级指针的使用 1.二维指针 总结 前言 自学笔记,没有历史知识铺垫(省略百度部分)C语言了解多级指针的使用 一.多级指针概念 指向指针的指针 即:存放地址的地址 int **p; 多级指针可以将内存上毫无关系的多组数据,产生关系(线性操作数据) 二.多级指针的使用 1.二维指针 二维指针示例,此处以系统入口main函数示例1 通过argc提供的数量做循环 int main(int argc,char **argv) { for (int i = 0; i <

  • 浅谈使用C++多级指针存储海量qq号和密码

    指针是c++中很重要的一部分内容. 可以认为,指针是C++这把宝剑最锋利的部分,当然,如果你使用不当,也会伤到自己的 本篇博客,将尝试用11级指针这个结构来存储海量的QQ号和密码.首先,郑重声明,我没有海量的QQ号和密码,只是想用这种结构来解决这个不存在的问题,不存在只是对我而言的,据称,腾讯内部的一些代码对QQ的处理就是用的这种结构 何为11级指针,其实,就是在指针前面加了11个*,加一个*就是1级指针,加两个*就是二级指针 char *********** QQptr = NULL; 指针和

  • C语言全方位讲解指针与地址和数组函数堆空间的关系

    目录 一.一种特殊的变量-指针 二.深入理解指针与地址 三.指针与数组(上) 四.指针与数组(下) 五.指针与函数 六.指针与堆空间 七.指针专题经典问题剖析 一.一种特殊的变量-指针 指针是C语言中的变量 因为是变量,所以用于保存具体值 特殊之处,指针保存的值是内存中的地址 内存地址是什么? 内存是计算机中的存储部件,每个存储单元有固定唯一的编号 内存中存储单元的编号即内存地址 需要弄清楚的事实 程序中的一切元素都存在于内存中,因此,可通过内存地址访问程序元素. 内存示例 获取地址 C语言中通

  • C语言全方位讲解指针的使用

    目录 一.指针的概念 1.1.变量和地址 1.2.指针变量和指针的类型 二.指针变量 2.1.指针变量的定义及使用 2.2.指针运算 三.野指针 3.1.概念: 3.2.野指针的成因 3.3.如何规避野指针 四.字符指针 4.1.字符指针类型 4.2.例题 五.指针与数组 5.1.指针与二维数组 5.2.多级指针 六.指针数组 七.数组指针 7.1.数组指针的定义 7.2.&数组名与数组名 7.3.数组指针的使用 八.指针与函数 8.1.函数指针的定义 8.2.指向函数的指针 总结 接着上次的函

  • C语言学习之指针知识总结

    目录 一.地址 二.指针与指针变量 三.指针的作用 四.初学指针时常见的错误 五.通过调用函数修改主调函数中的值 六.指针与一维数组 七.使用函数操作一维数组 八.指针变量所占字节数 九.静态数组的缺陷 十.malloc函数 十一.动态数组的构造 十二.静态内存与动态内存的对比 十三.多级指针 十四.跨函数使用内存 一.地址 内存中的最小单元是字节,一个字节对应一个编号,这里的编号就是对应字节的地址.换句话说,地址就是内存单元的编号. 二.指针与指针变量 指针与指针变量是两个不同的概念,指针是某

  • C语言简析指针用途

    目录 对象的访问方式 什么是指针 指针变量 与指针相关的运算符 指针变量作为函数参数 数组与指针 多维数组与指针 指针常量 和 常量指针 指针数组 与 数组指针 字符串与指针 函数指针 二级指针 与 多级指针 在C语言中,任何一个变量,都有两层含义: (1) 代表该变量的存储单元的地址:变量的地址 左值 lvalue (2) 代表该变量的值:右值 rvalue 对于一个变量的访问,只有两种情况: 一是把一个值写到变量的地址中去 (lvalue) 二是从变量的地址中取变量的值 (rvalue) 对

  • Go语言中的指针运算实例分析

    本文实例分析了Go语言中的指针运算方法.分享给大家供大家参考.具体分析如下: Go语言的语法上是不支持指针运算的,所有指针都在可控的一个范围内使用,没有C语言的*void然后随意转换指针类型这样的东西.最近在思考Go如何操作共享内存,共享内存就需要把指针转成不同类型或者对指针进行运算再获取数据. 这里对Go语言内置的unsafe模块做了一个实验,发现通过unsafe模块,Go语言一样可以做指针运算,只是比C的方式繁琐一些,但是理解上是一样的. 下面是实验代码: 复制代码 代码如下: packag

  • C语言中函数指针的三种使用方法总结

     C语言中函数指针的三种使用方法总结 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长. 定义方式:int (*p)(int x, int y); 实现代码: #include <stdio.h> int sum(int x, int y){ return x + y; } int reduce(int x, int y){ return x - y; } int

  • C语言中二级指针的实例详解

    C语言中二级指针的实例详解 用图说明 示例代码: #include <stdio.h> int main(int argc, const char * argv[]) { // int a = 5; int *p1 = &a; //-打印地址-----地址相同--------------- printf("&a = %p\n", &a);// printf("p1 = %p\n", p1);// int **p2 = &p

  • 图文详解c/c++中的多级指针与多维数组

    前言 首先先声明一些常识,如果你对这些常识还不理解,请先去弥补一下基础知识: 1.实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的. 2.数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址. 3.数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) . 4.指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=4. 5.指针可以进行加减算术运算,加减的基本单位是si

随机推荐