C/C++ 指针数组、二维数组

一、 二维数组

1> 初始化

int a[3][3] = { {1,0,0}, {0,1,0}, {0,0,1} }; // 这里是 {} , 而不是()

2> 将二维数组当做一维数组处理

void print_array( int * p, int row, int line)

{

  for(int i=0; i<row; ++i)

  {

    for(int j=0; j<line; ++j)

    {

      printf("%d \n", *( p + i * row + j ) ); // 相当于 *( *(p+i) + j ); // p[i][j]

    }

  }

}

// 调用

print_array( (int *)a, 3, 3 );

3> 二维数组当二维数组使用

void WordSort(char p[][10], int row)
{
  char temp[10];
  for(int n=0; n<row; ++n)
  {
    for(int m=n+1; m<row; ++m)
    {

      // 冒泡排序
      if ( strcmp(p[m], p[n] ) < 0 )
      {
        strcpy(temp, p[n]);
        strcpy(p[n], p[m]);
        strcpy(p[m], temp);
      }
    }
  }

  for(int n=0; n<row; ++n)
  {
    printf("%s \n", p[n]);

  }
}

// 调用

char p[5][10] = {"hello","world","111","135","134"};

WordSort(p, 5);

4> 行指针(二维数组作为形参的参数传递)

时间: 2024-07-30 20:27:25

C/C++ 指针数组、二维数组的相关文章

二级指针与二维数组

最近看<Linux C程序设计大全>这本书,虽然书中有一些错误,但整体来说,书写得还算可以. 当看到网络编程[第23.2.4小节 获得主机信息]时,遇到了一段代码,原文如下: “一台主机有许多和网络相关的信息,例如,主机名称.IP地址.主机提供的服务等.这些信息一般都保存在系统中的某个文件里(例如/etc/hosts等),用户程序可以通过系统提供的函数读取这些文件上的内容.Linux环境下使用gethostent函数读取和主机有关的信息,该函数的原型如下: 1 #include <net

指针与二维数组间的关系

1.四种表示a[i][j]的形式是等价的: a[i][j]==*(a[i]+j)==*(*(a+i)+j)==(*(a+i))[j] 2.通过行指针p引用二维数组a的元素a[i][j]的方法可用以下4种等价形式: p[i][j]==*(p[i]+j)==*(*(p+i)+j)==(*(p+i))[j] 3.对指向二维数组的行指针p进行初始化的方法: p=a 或p=&a[0] 4.对指向二维数组的列指针进行初始化的方法(以下三种方法等价): p=a[0] 或 p=*a 或 p=&a[0][0

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

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

C++ 一维数组 二维数组 指针

1.int a[3] = {1, 2, 3}a代表数组的首地址&a[0]也是数组的首地址 2.// int a[2][2] = {0, 1, 2, 3}; // **a 就是 a[0][0] 第一行第一列.// *(*a + 1) 就是 a[0][1] 第一行第二列.// **(a + 1) 就是 a[1][0] 第二行第一列.// *(*(a + 1) + 1) 就是 a[1][1] 第二行第二列. 3.int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9

指针和二维数组

指针和二维数组 首先定义一个数组: 1 int a[5][3] = { {1,6,11}, 2 {2,7,12}, 3 { 3,8,13 }, 4 { 4,9,14 }, 5 { 5,10,15 } 6 }; 随便定义的一个二维数组i = 5, j = 3 然后看下面3种方式: 1 int *b = a[0]; 2 int *c = *a; 3 int &d = **a; 其实上面的三种方式的效果是一样的,大牛一看就知道,这不是废话么.我们还是输出下 1 //value 2 std::cout

C语言学习笔记:18_数组-二维数组

/* * 18_数组-二维数组.c * * Created on: 2015年7月6日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /** * 二维数组: * 为什么要用二维数组呢; * 例如: 网络班有2个班,每班有5人. * 要想存储一班的学生的年龄 定义一个一维数组搞定 int ages[5]={18,19,20,18,19}; * 然后将两个班中的所有年龄分开存入一个数组中 int classes[2]

数据结构 二维数组--&gt;稀疏数组--&gt;二维数组

稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不同的值 2>把具有不同值的元素行列及值记录在一个小规模数组中,从而缩小程序规模 row col val [0]   总行       总列 有效数量 [1]  第一个数据行  第一个数据列 第一个数据值 [2]  第二个数据行 第二个数据列 第二个数据值 二维数组==>稀疏数组思路: 1>遍

数组指针与二维数组的寻址

引例:已知如下程序 1 #include <stdio.h> 2 main() 3 { 4 int x[3][4] = {1,3,5,7,9,11,2,4,6,8,10,12} ; 5 int (*p)[4] = x, k = 1, m, n = 0; 6 for(m=0; m < 2; m++) 7 n += *(*(p+m)+k); 8 printf("%d\n",n); 9 } 试写出程序的输出值.(虽然我很讨厌做这种笔头功夫的题,我也坚信编程语言是在实践中练出

c语言指针与二维数组

1 指针数组 例子: int i,j; int x[2][3]={{1,2,3},{4,5,6}}; int *p[2]={x[0],x[1]};//声明一个含有2个元素的一维int指针数组p for(i=0;i<2;i++) { for(j=0;j<3;j++) { cout<<*(p[i]+j)<<endl; } } 输出语句为cout<<p[i][j]<<endl;也是可以的. int i,j; int x[2][3]={{1,2,3},{

指针和二维数组的关系

指针引用多维数组 int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}};                    二维数组 a[0]  == 1 2 5 7 a[1]  == 9 11 13 15 a[2]  == 17 19 21 23 OK,二维数组在我们眼中,相当于三个一维数组组成:a代表着 二维数组的首地址. 而在二维数组中需要我们特别注意的是 a+1 指向其实是a[1]的地址. 我们在例子中设置的是 “INT” 类型的,在32位 vs中