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]                                                                                                     */
    /************************************************************************/
    
  • 相关阅读:
    小黄衫获奖感言
    原型设计
    20210326编程作业
    阅读任务
    准备工作
    cmd命令行批量修改文件名后缀
    【智能算法】模拟退火算法
    【智能算法】粒子群寻优算法
    【并行计算】基于OpenMP的并行编程
    Python科学计算——前期准备
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781668.html
Copyright © 2011-2022 走看看