数组指针 指针数组 二维指针

文章详细介绍了C语言中指针数组的概念,展示了如何用指针访问数组元素,以及如何处理二维数组。通过示例代码解释了数组指针和二维数组的区别,强调了在处理二维数组时正确使用指针的重要性,并提供了不同方式的示例代码以加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针数组和二维数组

# include<stdio.h>

int main()
{
    char *book[]={//数组指针,数组中每个元素都可以使用指针,而每个元素又可以用指针来访问 
        "<C语言设计语言>",
        "<C专家编程>",
        "C和指针", 
        "<C陷阱与缺陷>",//很薄 
        "<C primer Plus>",
        "<带你学C带你飞>",     //这些元素都是指针 
    };
    
    //可以用指向指针的指针的book指针来访问数组 
    
    char **fishC[1];//必须定义数组型,不然会报错 
    fishC[0]=&book[5];//book[5]是指针,&book[5]是指针的指针,所以fish【0】是指向指针的指针
    char **xiaoyvlover[5];
    int i;
    for(i=0;i<5;i++)
    {
        xiaoyvlover[i]=&book[i];
    }
    printf("fishC:%s\n\n",*fishC[0]);//*fishC=book[5],book[5]是指针,打印出这个指针 
    printf("小甲鱼爱的书单:\n");
    for(i=0;i<5;i++)
    printf("%s\n",*xiaoyvlover[i]) ;
    
    return 0;
}

数组指针//即每个数组元素是指针

 # include<stdio.h>

int main()
{
    int array[10]={1,2,3,4,5,6,7,8,9};
    int  *p=array;
    int i;
    
    for(i=0;i<10;i++)
    {
        printf("%d\n",*(p+i));//y也可以*p+i 
    }
    
    return 0;

# include<stdio.h>

int main()
{
    int array[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int  **p=array;
    int i,j;
    
    for(i=0;i<3;i++)
    for(j=0;j<4;j++)
    {
        printf("%d\n",*(*(p+i)+j));//y也可以*p+i 
    }
    
    return 0;

这样写错误 因为

    printf("p:%p,array;%p\n",p,array);
    printf("p+1:%p,array+1:%p",p+1,array+1);//p+1代表加一个地址逻辑单位量4,array+1就是加一 

改成这样就对了

# include<stdio.h>

int main()
{
    int array[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
//    int  **p=array;
    int i,j;
    
    for(i=0;i<3;i++)
    for(j=0;j<4;j++)
    {
        printf("%d\n",*(*(array+i)+j));
    }
    
    return 0;
 } 

想要用指针指向array就需要用指针数组

 # include<stdio.h>

int main()
{
    int array[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int  (*p)[4]=array;// (*p)和array跨度相同 也可以写成(*p)[3][4]=&array 此时跨度相同 
    int i,j;
    
    for(i=0;i<3;i++)
    for(j=0;j<4;j++)
    {
        printf("%d\n",*(*(p+i)+j);//如果上面改了,则 *p=a
    }
    
    return 0;

当然也可以写成下面这样保证指针数组和等号右边跨度相同即可,但一般不这儿写,太麻烦,看上面的代码就行

  # include<stdio.h>

int main()
{
    int array[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int  (*p)[3][4]=&array;// (*p)[4]=array;//跨度一样 数组指针 也可以写成(*p)[3][4]=&array 此时跨度相同 
    int i,j;
    
    for(i=0;i<3;i++)
    for(j=0;j<4;j++)
    {
        printf("%d\n",*(*((*p)+i))+j);//相当于将array 换成(*p) 
    }
    
    return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值