C二维数组用指针地址遍历

#include <stdio.h>
#include <stdlib.h>
int main(){
	int a = 100;
	void *p = &a;
	printf("a:%d address:%p\n",*(int*)p, &a);
	//unsigned int *pt = (unsigned int*)0xbfa70ee8;
	int *pt = (int*)malloc(sizeof(int));
	*pt = 200;
	printf("ptv:%p v:%d\n",pt,*pt);

	printf("********************行指针遍历二维数组*************************\n");

	//二维数组的指针地址
	int fa[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
	//行指针指针遍历输出二维数组
	int i,j;
	for(i=0;i<3;i++)
	{
		for(j=0;j<4;j++){
			printf("fa[%d][%d]=%d %p\n",i,j, *(*(fa+i)+j),*(fa+i)+j);
		}
	}
	printf("******************用数组名 列指针遍历二维数组***************************\n");
	//定义指针
	int *col = fa[0];//col是某行某列的指针 把第一行地址赋值给指针col
	for(;col<fa[0]+12; col++){
		//地址每次循环+1指向下一行一列
		if( (col-fa[0])%4==0 ){
			printf("\n");
		}
		printf("%d ", *col);
	}
	printf("******************用指针 列指针遍历二维数组***************************\n");
	int *pp = *fa;
	int *arr = *fa;//二维数组首地址等同于 int *arr = fa[0]
	for(;arr<pp+12; arr++){
		//地址每次循环+1指向下一行一列
		if( (arr-pp)%4 == 0 ){
			printf("\n");
		}
		printf("%d ", *arr);
	}

	return 0;

}

  

原文地址:https://www.cnblogs.com/wanglijun/p/8586337.html

时间: 2024-10-03 22:32:41

C二维数组用指针地址遍历的相关文章

二维数组和指针

二维数组和指针⑴ 用指针表示二维数组元素.要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题.我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了.而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组 下面我们讨论指针和二维数组元素的对应关系,清楚了二者之间的关系,就能用指针处理二维数组了.设p是指向数组a的指针变量,若有:p=a

二维数组与指针

二维数组: int / char / flaot a[n][m]; 可以看做是将一维数组做为基本类型产生的一维数组的数组类型,共n*m个最基本类型.这样看有许多优点(实际上计算机也是这样分配的). 二维数组数组名的注意事项: 1 #include <stdio.h> 2 int main() 3 { 4 int *p,a[3][4]; 5 p = a;//a是二维数组的首地址本质为行指针,原型为 a[][]:无法赋值给普通指针类型 *p: 6 return 0; 7 } 编译就会出现如下错误

程序猿之--C语言细节13(二维数组和指针,&amp;*a[i][0]的理解,数组1[e]和e[1]很可能你没见过)

主要内容:二维数组和指针,&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_COLS 10 int main(int argc, char **argv) {     int a[NUM_ROWS][NUM_COLS], *p, i = 0; // a理解为指向整数指针的指针 即int **     int c, d=2,*test, e[2] = {4,5},f[2][2] = {{

C语言 二维数组与指针笔记

今天分析了C语言二维数组和指针的基本理解,感觉有点懵...代码记录一下,如果有大神临幸发现哪里有误,欢迎指正~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> //void func(int p[][]) //这样写等同于void func(int **p) p++移动了四个字节,(*p)++移动了四个字节,不符合二维数组规律 //{ //} //列优先输出的函数(即竖着输出) void func

直观理解C语言中指向一位数组与二维数组的指针

一维数组和指针: 对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我

关于二维数组和指针

在C语言中有如下结论: 一.在表达式中数组名都是其首元素的地址 但有两种情况除外: (1)当数组名作为sizeof操作符的操作数时,sizeof返回的是整个数组长度,而不是指向数组的指针长度 (2)当数组名作为&操作符的操作数时,所产生的是一个指向数组的指针,而不是一个指向指针常量的指针 二.在任何变量的前面加&,就是取这个变量的地址. 三.举例: 若有二维数组:a[x][y],则有: (1)a=&a[0] (2)a[0]=&a[0][0]=*a (3)&a=整个二

例看二维数组,指针,二维数组指针

例程: /****************************************************** * * 文件名:例程 * * 文件描述:例看二维数组,指针,二维数组指针 * * 创建人:Jesse * * 版本号: * * 修改记录: * ******************************************************/ #include <stdio.h> #define ROW 3 #define LINE 3 void main(voi

程序员之--C语言细节13(二维数组和指针,&amp;amp;*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)

主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_COLS 10 int main(int argc, char **argv) {     int a[NUM_ROWS][NUM_COLS], *p, i = 0; // a理解为指向整数指针的指针 即int **     int c, d=2,*test, e[2] = {4,5},f[2][2] = {{

二维数组及指针

首先,看一维数组. []符号是下标运算符,a[i]就是*(a+i) 那么a[i][j] 就是*(a[i]+j)=*(*(a+i)+j) 本人对二级和多级指针的理解:1.抽象上说二级指针的内容是地址的地址.变量A好像跟你捉迷藏似的,你要想找到A,你先得去一个地方把A的地址给找出来,然后再根据这个地址找到A.就类似武侠电影里的宝藏,你要先去一个人的背上发现藏宝图,然后再根据藏宝图里画的地址找到宝藏,在这里,这个人的背就是一个最外层的地址,藏宝图就是内层的地址.2.对于二级指针和多级指针,定义时,我们