首页 > 其他分享 >C语言数组指针的使用学习笔记

C语言数组指针的使用学习笔记

时间:2024-11-04 14:17:03浏览次数:6  
标签:arr int void 笔记 C语言 数组 test 指针

一、举例

        int arr[5];                //arr是整型数组

        int *parr1[10];        //parr1是整型指针数组

        int (*parr2)[10]       //parr2是数组指针

        int (*parr3[10])[5]   //parr3是存放数组指针数组  注意*与[ ]的优先级关系

二、数组参数和指针参数

1.一维数组传参

        数组传参形参的部分可以写成数组也可以写成指针。

        例如:

#include <stdio.h>

void test(int arr[])
{}

void test(int arr[10])
{}

void test(int *arr)
{}

void test2(int *arr[20])
{}

void test2(int **arr)
{}

int main()
{
  int arr[10] = {0};
  int *arr2[20] = {0};

  test(arr);
  test2(arr2);

  return 0;
}

  2.二维数组传参

        二维数组传参,函数形参的设计只能省略第一个,因为对一个二维数组,可以不知道有多少行,但是必须知道有多少列,这样才方便运算。

#include <stdio.h>

void test(int arr[3][5])    //OK
{}

void test(int arr[][5])    //形参的二维数组,行可以省略,列不能省略
{}

//不可行,二维数组的数组名,表示首元素的地址,也就是第一行的地址
//第一行是一个一维数组
void test(int *arr)  
{}

//不可行,arr先与[]结合,类型是int*,是一个指针数组
 void test(int* arr[5])
{}   

//OK
int test(int (*arr)[5])
{}

//不可行,二级指针是专门用来储存一级指针变量的地址
int test(int **arr)
{}
  
int main()
{
    int arr[3][5] = {0};
    test(arr);
}

3.一级指针传参

        如果函数的参数部分是指针,传参时可以是地址,数组名,指针。(本质都为指针)

#include <stdio.h>

/*void print(int* p)
{}
int a = 10;
int* prt = &a;
int arr[10];

print(&a);
print(prt);
print(arr);*/

void print(int *p,int sz)
{
    int i = 0;
    for()
    {
        printf("%d\n",*(p+i));
    }
}

int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9};
    int *p = arr;
    int sz = sizeof(arr)/sizeof(arr[0]);

    print(p,sz);

    return 0;
}

4.二级指针传参

        如果函数的形式参数是二级指针,调用函数的时候传参使用一级指针地址指针数组的数组名二级指针指针(本质都为二级指针)

#include <stdio.h>

void test(int** prt)
{
    printf("num = %d\n",**ptr);
}

int main()
{
    int n = 10;
    int *p = &n;
    int **pp = &p;
    int* arr[10];
 
    test(pp);
    test(&p);
    test(arr);
 
    return 0;
}

标签:arr,int,void,笔记,C语言,数组,test,指针
From: https://blog.csdn.net/a282828282/article/details/143477137

相关文章

  • Kafka笔记系列-概念相关
    消息队列的主要功能连接服务、消息路由、消息传递、数据持久化、日志记录消息队列基本分类1、点对点生产者发送消息到队列中,消费者从队列中取出并消费。消息在消费以后,队列中不再有存储,队列可以有多个消费者,但是一个消息只能被一个消费者消费2、发布订阅模式生产者发布消息......
  • 《AI创作背景后的版权陷阱》学习笔记
    1.AI内容生产,会侵犯他人版权吗?2.我用AI生产内容,我享有版权吗?3.如果我享有版权的话,我该怎么保护?别人盗用我的作品怎么办? (一)只是产权主要包括  ##版权的标志01  版权:版权即著作权指文学、艺术、科学作品的作者对其作品享有的权利。保护对象:具有独创性,并能以某种......
  • 《C语言程序设计现代方法》note-2 格式化输入/输出 运算符和表达式
    助记提要转换说明的格式;scanf处理输入的过程;除法操作的注意事项;运算符的结合性;不在子表达式中输入操作数的原因;表达式允许用作语句的问题;3章格式化输入/输出3.1printf函数printf函数用来显示格式串的内容,并在该串中指定位置插入要显示的值。printf(格式串,表达式1,......
  • 与C语言的旅程之分支与循环(2)
    与C语言的旅程之分支与循环        C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,目录与C语言的旅程之分支与循环1.if语句1.1if​编辑1.2else1.3分⽀中包含多条语句1.4嵌套if1.5悬空else问题2.关系操作符3.条件操作符......
  • 【笔记/模板】二叉搜索树-平衡树
    二叉搜索树www.luogu.com.cn定义二叉搜索树(\(\text{BinarySearchTree}\))是一种形状如二叉树的数据结构,用于快速查找和增加删除操作,它有如下几个特殊性质:空树是二叉搜索树。若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。若二叉搜索树的右......
  • 【笔记/模板】割点和桥
    割点对于一张无向图\(G=(V,E)\),使得H是G的连通子图,且不存在\(F\)满足\(H\subsetneqF\inG\)且\(F\)为连通图,则称\(H\)是\(G\)的一个连通块/连通分量(connectedcomponent),又叫极大连通子图。由此,我们可以对割点做出如下定义:对于一个无向图,如果把一个点删除后......
  • 【笔记/模板】线段树(改)
    线段树线段树是OI竞赛中最强大的数据结构之一,可以用来维护和、积以及最值等具有合并性质的信息。一般线段树P3372【模板】线段树1-洛谷|计算机科学教育新生态(luogu.com.cn)P3373【模板】线段树2-洛谷|计算机科学教育新生态(luogu.com.cn)以模板一为例:cla......