zoukankan      html  css  js  c++  java
  • C语言指针与二维数组

    在这里插入图片描述
    设有m行n列的二维数组
    当二维数组的首地址给指针变量p以后,则访问某个元素a[i][j]可以用一下几种方式来访问

    *(p+i*n+j),
    p[i*n+j],
    *(a[0]+i*n+j)
    

    二维数组a不可赋值给一般指针变量p,只能赋值给指向二维数组的行指针变量

    #include <stdio.h>
    
    int main(){
    
    	int a[2][3]={{1,2,3},{4,5,6}};
    	int *p,i,j;
    	p = &a[0][0]; //也可以写成p=a[0];p指向二维数组a的第一个单元
    	for(i=0;i<2;i++){
    		for (j=0;j<3;j++)
    		{
    			printf("a[%d][%d]=%d
    ",i,j,*(p+i*3+j));
    		}
    		printf("
    ");
    	}
    	printf("%d
    ",*(a[0]+1));//a[0]+1 代表a[0][1]的地址,就是&a[0][1] 推论 a[i]+j  就是a[i][j]的地址  *(a[0]+1) 就是a[0][1]的值
    	printf("%d %d %d
    ",a[1],*a+1,**(a+1));
    	return 0;
    }
    /************************************************************************/
    /* a[i] 即 *(a+i)可以看成 一维数组a[i]的地址&a[i]   
       a[i] 也可以看成二维数组的首地址&a[i][0]                                                                  */
    /************************************************************************/
    
    /************************************************************************/
    /* a[i][j]等价形式
    
    a[i][j]
    *(a[i]+j)
    *(*(a+i)+j)
    (*(a+i))[j]                                                                    */
    /************************************************************************/
    
    /************************************************************************/
    /* p指针引用a[i][j]  int (*p)[];
    
    p[i][j]
    *(p[i]+j)
    *(*(p+i)+j)
    *(*(p+i))[j]                                                                                                     */
    /************************************************************************/
    
  • 相关阅读:
    vmware 虚拟机共享 windows 目录
    下载 golang.org/x 包出错不用代理的解决办法
    c++小游戏——彩票
    恶意代码要注意
    Pascal到c++,求大佬翻译!
    【CYH-01】小奔的国庆练习赛:赛后标程
    鸽巢原理及其扩展——Ramsey定理
    区块链,你知道多少?
    go语言
    10.2:异或树经验
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781668.html
Copyright © 2011-2022 走看看