二级指针和指针函数

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

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]。

目录
相关文章
|
2月前
|
C++
定义和使用指向函数的指针变量
定义和使用指向函数的指针变量
15 1
|
2月前
|
C语言
【C语言】指针进阶之sizeof和strlen函数的对比
【C语言】指针进阶之sizeof和strlen函数的对比
|
28天前
|
搜索推荐 C语言 C++
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现3
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
9天前
|
存储 C语言
指针数组作为main函数的形参
指针数组作为main函数的形参
13 0
|
2月前
|
安全 C语言 C++
字符指针做函数参数
字符指针做函数参数
10 1
|
2月前
|
安全 C语言
字符指针作函数参数的深入探索
在C语言编程中,字符指针是一个重要的概念,尤其在处理字符串和文本数据时。当我们将字符指针作为函数参数时,可以实现多种灵活和高效的操作。本文将深入探讨字符指针作为函数参数的应用,并通过代码示例加以说明。
15 1
|
2月前
|
存储 Shell C语言
指针数组组main函数的形参
指针数组组main函数的形参
10 0
|
2月前
|
C语言 C++
指针变量作为函数参数
指针变量作为函数参数
8 1
|
2月前
|
存储 Serverless 编译器
怎样定义和使用指向函数的指针变量
怎样定义和使用指向函数的指针变量
8 0
|
2月前
|
C++
用指向指针函数作函数参数
用指向指针函数作函数参数
8 1