c语言之使用指针*和地址&在二维数组中表示的含义

假设有这么一个数组:int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}}

表示形式 含义 地址
a 二维数组名,指向一维数组a[0],即0行的首地址 假设首地址为2000

a[0],

*(a+0)

*a

0行0列元素地址 2000
a+1,&a[1] 第一行首地址 2016
a[1],*(a+1) 1行0列元素a[1][0]的地址 2016

a[1]+2

*(a+1)+2

&a[1][2]

1行2列元素a[1][2]的地址 2024

*(a[1]+2)

*(*(a+1)+2)

a[1][2]

1行2列元素a[1][2]的值 11

说明:

(1)&是取地址的意思,*是指向某元素的地址,*(*())表示的解引用,即取得某指针指向的值。

(2)二维数组在内存中是连续存储的,因此a[1][0]的地址是a[0][0]的地址再加上a[0]里面元素个数×每个元素所占字节数,即2000+4×4=2016。

(3)二维数组名a表示的是第0行的地址,a[0]表示第0行第0列元素的地址。(在c语言中数组名就是其首元素的地址)。

(4)a[i][j]表示第i行第j列的值,用&可以得到其地址。

原文地址:https://www.cnblogs.com/xiximayou/p/12120590.html

时间: 2024-10-10 07:49:34

c语言之使用指针*和地址&在二维数组中表示的含义的相关文章

qsort 函数的使用——对普通数组、指针数组、二维数组中的元素进行排序

在ANSI C中,qsort函数的原型是 #include <stdlib.h> void qsort(void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *)); 解释:qsort函数对含有nmemb个元素的数组进行排序,而base指针指向数组的第一个元素.这个数组的元素个数由size指定. compar函数对qsort的比较操作进行定义,所以可以定制数字的比较,字符串的比较,甚至结构体

C++入门经典-例6.12-使用数组地址将二维数组输出

1:以a[4][3]为例 a代表二维数组的地址,通过指针运算符可以获取数组中的元素 (1)a+n代表第n行的首地址 (2)&a[0][0]既可以看作第0行0列的首地址,同样也可以被看作是二维数组的首地址.&a[m][n]就是第m行n列元素的地址 (3)&a[0]是第0行的首地址,当然&a[n]就是第n行的首地址 (4)a[0]+(n-1)表示第0行第n个元素 (5)*(*(a+n)+m)表示第n行第m列 (6)*(a[n]+m)表示第n行第m列元素 2:代码如下: // 6

二维数组中数组名与其指针的关系

大多数初学者不是很清楚二维数组是个怎样的存在,今天我就来说说这个二维数组,计算机内存是一连串的存储单元,我们可以把它理解成一条线,没错就是一条线,那么问题来了,二维是个怎样的存在呢???说白了,二维数组并不真是二维,只是人们主观的将它变成二维,举个例子吧!比如楼梯,我们都知道楼梯说白了就是一条路,但是我们刻意将楼梯来回上升的方式,这都是我们主观的改变,实际上我们可以看成是一个直路,只是被工人弄弯了.好了,不扯了,进入主题.... 二维数组名a是数组第一行的指针,它指向的是一整行,*a才是a[0]

指针、函数、二维数组之间的联系

1.传递数组指针 1 #include <stdio.h> 2 void output( int (*pa)[3], int n )//这个函数只能输出n行3列的二维数组 3 { 4 int i,j; 5 for( i=0;i<n;i++ ){ 6 for( j=0;j<3;j++ ) 7 printf("%d ", pa[i][j] ); 8 printf("\n"); 9 } 10 } 11 void main() 12 { 13 int

C语言:通过指针函数输出二维数组中每个学生的成绩

// //  main.c //  Pointer_function // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:通过指针函数,输入学生学号时,在控制台上显示对应的学生成绩. #include <stdio.h> float *search(float(*p)[4],int n)//float(*p)[4]是数组指针,指向有4个float元素的二位数组的

【C语言】【面试题】【笔试题】二维数组中的查找,杨氏矩阵

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <math.h> #include<windows.h> int find(int arr[], int rows, int columns, int num) {     int find = 0;     if (arr != NULL && rows > 0 &

【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #include <stdio.h> #define col 4 #define rol 4 int yang(int(*p)[col], int num) { int i = 0; int j = col - 1; while (j+1) { int *q = &(p[i][j]); if

c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。

将一个二维数组行和列的元素互换,存到另一个二维数组中. 解:程序: #include<stdio.h> int main() { int i, j, a[2][3] = { {1,2,3},{4,5,6} },b[3][2]; printf("array a:\n"); for (i = 0; i <=1; i++)//处理a数组中的一行中各元素 { for (j = 0; j <= 2; j++)//处理a数组中的某一列元素 { printf("%5

【经典游戏编程题】C语言:编写一个棋盘游戏,与二维数组结合

#include<stdio.h> #include<stdlib.h> char arr[3][3]; void print() {  int i=0;  for(i=0;i<3;i++)  {   printf("%c|%c|%c|\n",arr[i][0],arr[i][1],arr[i][2]);   printf("_|_|_|\n");  } } void init_arr() {  int i=0;  int j=0;