关于指针传递参数的理解

学习c语言至今,已经到了一个瓶颈,难度大多来自于指针和指针的参数传递。

指针分为一维指针、多维指针、函数指针、指针数组、数组指针等等;其中主要我们要了解的是一维指针和指针数组、数组指针。

#include<stdio.h>
#include<stdlib.h>
void allocate_memory_for_two_array(int *pload[],int line,int row)
void initial_memory_for_two_array(int *pload[],int line,int row)
void sort_pop_for_two_array(int *pload[],int line,int row)
void output_two_array(int *pload[],int line,int row)
void get_line_and_row_for_two_array(int *pline,int *prow)
int main(void)
{
    int line,row;
    int **pload=NULL;//定义了一个二维指针,并且将其置为空,分配给它一块栈空间的内存;
    get_line_and_row_for_two_array(&line,&row);//调用获取行和列的函数,并且给其传递两个变量的地址
    pload=(int**)malloc(line*sizeof(int *));//动态分配给二维指针一块堆空间大小为line*sizeof(int*)的内存空间,
    allocate_memory_for_two_array((pload),line,row);调用动态分配内存的函数,将二维指针类型的pload传递给*pload[]指针数组,在这里,形参如果是指针数组类型,必须给他传递二维指针类型的实参
    initial_memory_for_two_array(pload,line,row);//
    sort_pop_for_two_array(pload, line, row);
    output_two_array(pload,line,row);
    free(*pload);//释放小内存
    free(pload);//释放大内存,此内存由段空间分配,用完结束后必须立即释放
    return 1;    
}

一维指针,实际上就是一个地址,众所周知一个数组的首地址就是一个一维指针,形式为int(char) *,

例如:int *load;load也可以作为load[]数组的首地址,两者在参数传递是是等价的;

多维指针;本质上也是由一维指针演变来的;

例如:int buff[][],作为二维数组,其首地址可以写做 buff,这是一个行指针,代表第0行的地址,当然也是一个一维指针,同样的,如果要将第一行的第一个元素的地址表达出来,buff[0],而如果要求整个二维数组的地址应该用&buff表示,对其求值,也就是*buff,代表着第一行第一个元素的地址,如果再次求值**buff,得出的结果是第一行第一个元素地址存放的值

二维数组:

int load[5][10];

int *pload=&load[0][0];pload类型是int*,load[i]本质上是二维数组第i+1行的

多维指针;

int num=10;

int *pload=&num;

int **ppload=&pload;

int ***pppload=&ppload;

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值