二级指针和指针函数

简介: 二级指针和指针函数

1.二级指针

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
  int a = 10;
  int* pa = &a;//pa就是一级指针变量
  int** ppa = &pa;//ppa就是二级指针变量
  **ppa = 20;
  printf("%d\n,a");
  return 0;
}

a的值是4,a的地址是0x009efadc,


       pa为指针变量,pa存的是a的地址0x009efadc,因此可以通过pa来找到a的值,或者修改a的值。 * 为解引用操作符,int* pa表示pa为指针。


       ppa为二级指针,ppa存的是pa的地址,int** ppa中右边的*说明ppa是指针,而int*是说明ppa指向的对象是int*类型。二级指针是用来存放一级指针变量的地址的。

名称 类型
a 10 int
&a 0x012ffcf8 int

pa

0x012ffcf8 int*
&pa 0x012ffcec int*
ppa 0x012ffcec int**

# '&'为取地址操作符

2.指针函数

       普通我们使用的数组:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int arr[3][4] = { 1,2,3,4,2,3,4,5,3,4,5,6 };
  //1 2 3 4
  //2 3 4 5
  //3 4 5 6
  int i = 0;
  int j = 0;
  for (i = 0; i < 3; i++)
  {
    for (j = 0; j < 4; j++)
    {
      printf("%d ", arr[i][j]);
    }
    printf("\n");
  }
    return 0;
}

指针数组:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a = 10;
  int b = 20;
  int c = 30;
  int* pa = &a;
  int* pb = &b;
  int* pc = &c;
  int* parr[10] = { &a,&b,&c };//parr就是用来存放指针的指针数组
  int i = 0;
  for (i = 0; i < 3; i++)
  {
    printf("%d ", *(parr[i]));
  }
}

int* parr就是我们的指针数组,我们在parr中存放a,b,c的地址。


       parr中的元素包括&a,&b,&c.


       &a指向的对象为a。


       &b指向的对象为b。


       &c指向的对象为c。


       接下来是我们的拓展内容:


       我们可以通过指针函数去合并不同的数组


       我们知道,parr中存放的元素是arr1,arr2,arr3,而传输过去的arr1为首元素的地址,因此parr为int*类型,用来存放地址。


       使用arr1的话,我们会:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
  int i = 0;
  int arr[] = {1,2,3,4,5,6,7,8,9,0};
  for (i = 0; i <= 9; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

已知arr1,arr2,arr3被我们存放到parr中,我们应该如何去使用数组呢?

       由于arr[i]-->*(arr+i),想要打印出arr1,arr2,arr3的内容,我们只需要通过for循环parr[i][j]就可以:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int arr1[4] = { 1,2,3,4 };
  int arr2[4] = { 2,3,4,5 };
  int arr3[4] = { 3,4,5,6 };
  int* parr[3] = { arr1,arr2,arr3 };
  int i = 0;
  for (i = 0; i < 3; i++)
  {
    int j = 0;
    for (j = 0; j < 4; j++)
    {
      printf("%d ", parr[i][j]);
    }
    printf("\n");
  }
  return 0;
}

parr[i]表示的是parr的元素及arr1,arr2,arr3,parr[i][j]在这个基础上可视为arr1[j],arr2[j],arr3[j]。

目录
相关文章
|
3月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
4月前
|
C语言
C语言中返回指针值的函数
C语言中返回指针值的函数
45 0
|
19天前
|
Linux
在Linux内核中根据函数指针输出函数名称
在Linux内核中根据函数指针输出函数名称
|
28天前
|
程序员 C语言
指针在函数参数和返回值中的使用
指针在函数参数和返回值中的使用
30 9
|
1月前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
3月前
|
编译器 C++
函数指针和函数对象不是同一类型怎么替换
函数指针和函数对象不是同一类型,为何可替换用作同一函数的参数
|
3月前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节
|
3月前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
29 1
|
3月前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
33 1
|
3月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
36 0