C语言中指针、数组作为作为函数参数使用(总结)附详细示例

一、简介

本文主要讲述指针、数组和数组指针等做为函数参数进行使用,最后通过具体示例进行快速理解,希望对大家有所帮助。

二、数组

2.1 一维数组

一维数组作为参数传参,直接将地址传进来进行使用。

#include <stdio.h>
#include <stdlib.h>

void func(int arr[]){
        int i = 0;
        for(i;i < 5;i++){
                printf("the arr[%d] is :%d\n",i,arr[i]);
        }
        return;
}

void main(){
        int arr[5] = {1,2,3,4,5};
        func(arr);
        return;
}

在这里插入图片描述

2.2 二维数组

相对于一维数组,二维数组要明确列的值,具体有下面两种类型:

第一类 固定行列传参 : void func(int arr[2][3])
第二类 固定列传参:void func(int arr[][3])
#include <stdio.h>
#include <stdlib.h>

//void func(int arr[2][3]){
void func(int arr[][3]){
        int i ,j;
        for(i = 0;i < 2;i++){
                for (j=0;j < 3;j++){
                        printf("the arr[%d][%d] is :%d\n",i,j,arr[i][j]);
                }
        }
        return;
}

void main(){
        int arr[2][3] = {1,2,3,4,5,6};
        func(arr);
        return;
}

在这里插入图片描述

三、指针

3.1 一级指针

首先指针即存放一个地址,指向的这个地址的类型要根据具体数据进行声明;
如:

int a = 3;
int *p = &a; //将存放整型3的地址赋值给p

以指针数组为例进行解析:

#include <stdio.h>
#include <stdlib.h>

void func(int *p){
        int i = 0;
        for(i;i < 5;i++){
                printf("the arr[%d] is :%d\n",i,*(p+i));
        }
        return;
}

void main(){
        int arr[5] = {1,2,3,4,5};
        int *p = arr; //arr为数组的首地址
        func(p);
        return;
}

在这里插入图片描述

3.2 二级指针

二级指针相对于一级指针的不同是,二级指针将一级指针的地址再存放在定义的二级指针中:

int a = 3;
int *p = &a; //将存放整型3的地址赋值给p,指向一个int数据
int **q = &p; //存放指针p的地址,指向一个指针

使用基本与一级指针类似,用于多级函数传参使用:

#include <stdio.h>
#include <stdlib.h>

void func(int **q){
        int i = 0;
        for(i;i < 5;i++){
                printf("the arr[%d] is :%d\n",i,*(*q+i));
        }
        return;
}

void main(){
        int arr[5] = {1,2,3,4,5};
        int *p = arr; //arr为数组的首地址
        int **q = &p;
        func(q);
        return;
}

在这里插入图片描述

注意:
当申明viod ** 类型的二级指针时,如果要输出,需要先强制转换为特定的类型进行输出,如 int **:

int d = 4;
void * f = (void*)&d;
void ** g = &f;
printf("the **g is :%d\n",**((int **)g));

3.3 结构体指针

#include <stdio.h>   
#include <stdlib.h>   
#include <string.h>   
  
struct student{   
  char *name;   
  int score;   
  struct student* next;   
}stu,*stu1;    
  
int main(){    
  stu.name = (char*)malloc(sizeof(char)); /*1.结构体成员指针需要初始化*/  
  strcpy(stu.name,"Jimy");   
  stu.score = 99;   
  
  stu1 = (struct student*)malloc(sizeof(struct student));/*2.结构体指针需要初始化*/  
  stu1->name = (char*)malloc(sizeof(char));/*3.结构体指针的成员指针同样需要初始化*/  
  stu.next  = stu1;   
  strcpy(stu1->name,"Lucy");   
  stu1->score = 98;   
  stu1->next = NULL;   
  printf("name %s, score %d \n",stu.name, stu.score);   
  printf("name %s, score %d \n",stu1->name, stu1->score);   
  free(stu1);   
  return 0;   
}    

输出:

name Jimy, score 99 
name Lucy, score 98 

四、其他相c语言链接

1、C语言常见数据类型字节数和打印格式总结**

2、c语言函数指针、指针数组、二级指针、结构体、联合体、枚举实例解析

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值