精华内容
下载资源
问答
  • C语言 使用指针遍历二维数组

    万次阅读 2017-10-11 22:20:15
    二维数组在内存中存储是线性连续的,可以计算出二维数组的偏移量,进而... 计算出访问单元的 地址偏移量 就可以一级指针遍历二维数组中的所有数据。 */ #include int main() { int array[2][3] ={{1,2,3},{4,5,6}};

    二维数组在内存中存储是线性连续的,可以计算出二维数组的偏移量,进而使用一级指针遍历二维数组

    /**
    使用1级指针访问二维数组
    因为数组本身在地址空间中就是连续排列的,根据行数和列数,
        计算出访问单元的 地址偏移量 就可以用一级指针遍历二维数组中的所有数据。
    */
    #include<stdio.h>
    int main()
    {
        int array[2][3] ={{1,2,3},{4,5,6}};
        int *pArray = NULL;
        pArray = array;
        printf("array[0][0] = %d\n", *pArray);
        printf("array[1][2] = %d\n", *(pArray + 1 * 3 + 2));//访问1行2列的二维数组
        printMatirx(array,2,3);//打印2行3列的数组
        return 0;
    }
    void printMatirx(int *pArray,int rows,int cols)
    {
        int i;
        int j;
        for(i=0;i<rows;i++)
        {
            for(j=0;j< cols;j++)
            {
                printf("%d\t",*(pArray+i*cols+j));//访问i行j列的二维数组元素
            }
            printf("\n");
        }
    }
    
    结果:

    array[0][0] = 1
    array[1][2] = 6
    1       2       3
    4       5       6
    
    使用指向一维数组的指针(一维数组的长度和二维数组的列数要一样)来遍历二维数组,这样的好处就是,可以向使用二维数组名那样,通过下标来访问

    /**
    使用指向数组的指针来遍历二维数组
    */
    #include<stdio.h>
    #define COLS 3
    
    void printMatirx(int (*pArray)[COLS],int rows);
    
    int main()
    {
        int array[2][COLS] ={{1,2,3},
                            {4,5,6}};
    
        int (*pArray)[COLS] = NULL;
        pArray = array;
        printf("array[0][0] = %d\n", pArray[0][0]);
        printf("array[1][2] = %d\n", pArray[1][2]);
        printMatirx(pArray,2);
        return 0;
    }
    void printMatirx(int (*pArray)[COLS],int rows)
    {
        int i,j;
        for(i=0;i<rows;i++)
        {
            for(j=0;j<COLS;j++)
            {
                printf("%d\t",pArray[i][j]);
                /*
                []运算符的结合方向是由左向右,pArray[1][2]就等价于(* (pArray + 1))[2],
                而由于pArray是数组指针,而且数组的长度为3,
                所以* (pArray + 1):表示跨过3个元素,而也就是到array第二行
                即表示array[1]这个数组,则pArray[1][2]则就完全等价于array[1][2]。
                */
            }
            printf("\n");
        }
    }
    
    结果:

    array[0][0] = 1
    array[1][2] = 6
    1       2       3
    4       5       6
    


    展开全文
  • c语言没有String类型,更没有String.length()方法,那么要怎么求数组长度呢? 数组举例:int arr[]={2,3,...举例:以指针方式遍历数组 #include <stdio.h> int main(){ int arr[] = { 99, 15, 100, 888, 252 };

    c语言没有String类型,更没有String.length()方法,那么要怎么求数组长度呢?

    数组举例:int arr[]={2,3,1,4}, char str[]={“Hello”}

    获得数组长度可以用这个方法:
    比如int数组 sizeOf(arr)/sizeOf(int) 可以求出数组长度为4
    比如char数组 sizeOf(str)/sizeOf(char) 可以求出数组长度为6,Hello实际上是Hello\0,多了一个\0结束符
    获取char数组长度还有一个更为简便的方法,
    引入头文件#include <string.h> int len=strlen(str) 求出数组长度为5

    举例:以指针方式遍历数组

    #include <stdio.h>
    
    int main(){
        int arr[] = { 99, 15, 100, 888, 252 };
        int len = sizeof(arr) / sizeof(int);  //求数组长度
        int i;
        for(i=0; i<len; i++){
            printf("%d  ", *(arr+i) );  //*(arr+i)等价于arr[i]
        }
        printf("\n");
        return 0;
    }
    
    展开全文
  • 因为*(arr)是指arr数组内存编号所对应的首地址的值,即arr[0]的值。所以*(arr+i)可以实现遍历整个数组。 转载于:https://www.cnblogs.com/hxinbk/p/4898255.html

    因为*(arr)是指arr数组内存编号所对应的首地址的值,即arr[0]的值。所以用*(arr+i)可以实现遍历整个数组。

     

    转载于:https://www.cnblogs.com/hxinbk/p/4898255.html

    展开全文
  • 在通常的认识里我们认为一维数组名代表数组的首地址,当然我们更习惯一个指针来指向一个一维数组,这样做的好处是由于指针是变量可以通过自增自减等操作来完成数组元素的遍历,但是数组名也可以完成这种功能,不同...

    简单理解C语言中指针和数组的关系

    一维数组和指针的关系

    在通常的认识里我们认为一维数组名代表数组的首地址,当然我们更习惯用一个指针来指向一个一维数组,这样做的好处是由于指针是变量可以通过自增自减等操作来完成数组元素的遍历,但是数组名也可以完成这种功能,不同之处是数组名是常量,其值不能再更改,不能通过自增自减操作实现元素的遍历。

    int a[10]={1,2,3,4,5,6,7,8,9,10};
    int *p;
    p=a;//p=&a[0]
    

    在上面的定义中可以使用p++来访问元素,但是不能使用a++,而只能使用a+i来访问元素。

    二维数组和指针的关系

    在二维数组中我们也希望用一个指针变量来指向,这样的操作好像不如一维数组来的方便,例如下面的定义是很误导我们的。

    int a[][5]={1,2,3,4,5,6,7,8,9,10};
    int *p;
    p=a;//此处会报错
    

    上面的代码在Visual Studio中提示的错误信息是这样的:不能将 “int (*p)[5]” 类型的值分配到 "int * "类型的实体 。这里 "int (*p)[5]"显然是指针数组,其本质上是数组,不过数组中存放的是指针变量,"int *"显然是指针类型,这两个在数量上就不匹配,显然指针数组中包含的元素要比单个指针变量多,再来分析上面的代码 “int *"显然指的是int *p,那么"int (*p)[5]"则指的是a[][5],也就是说应当用指针数组才能和a[][5]匹配,于是下面的定义才是合法的。//此段的p是为了显示而加上去的,阅读时可以去掉

    	int a[][5] = { 1,2,3,4,5,6,7,8,9,10 };
    	int (*p)[5];
    	p = a;//或者p=a[0]
    

    该怎么去理解二维数组呢?像很多教科书上写的一样,我们可以把二维数组看成是多个一维数组的集合,于是便有:
    二维数组的划分
    在上面的划分中我们都能够看到的是后一个等号,而对于前一个等号,我们可以认为这也是一个数组,只不过这个数组里只有两个元素,不过这两个元素都是一维数组,这样一来数组a确实应当用一个指针数组来描述而不能简单用一个指针变量来描述。前一个等号两端内容
    还可以这样认为,由于上面由a[2][5]过渡到后面的具体元素a[i][j]需要两个等号来完成,因此可以认为数组名是一个二级指针,通过下面的代码输出结果也可以验证。
    验证数组名a看成是二级指针
    以上就是本人粗略的理解,水平有限,还望大佬指正。

    展开全文
  • 第一种方法: 1 #include <stdio.h> 2 void bian(int row,int col,int *a) 3 { 4 int i,j; 5 for(i=0;i<row;i++) 6 for(j=0;j<col;j++) 7 printf("%d ",*(a+col...
  • 前言 是突然想到的方法,可能早有大佬想过这样的方法,但我还是记录下来,路过的各位就当看个新鲜。 首先是寻常的遍历方法 ...我们遍历一维数组,正常的...二维数组亦是一样依次访问下标来遍历数组,只不过此时要定.
  • 通常进行二维数组遍历都会想到二级指针,今天试了一下竟然会报错。 代码如下: #include <stdio.h> #include <stdlib.h> void traversalArray(int **a,int row,int column) { for(int i = 0;i<...
  • 1.指针与数组 用指针遍历数组
  • 二维数组指针 1 二维数组初始化 以下几种赋值方式均可。 int a[4][4] = {0}; int a[4][4] = {1,2,3,4,5,6}; int a[4][4] = {{1,2,3},{4,5},6} //其他元素都为0; int b[][4] = {{1,2},{3,4}}; //第一维可以省略...
  • c语言 数组 指针

    2021-05-02 11:57:38
    文章目录数组 数组 数组的基本使用 数组定义: 类型 数组名 数组大小 int array[10] 数组单独访问:数组的中...循环的方式遍历数组 #include <stdio.h> #include <stdlib.h> int main() { int i; in
  • 以前写菜单方面东西时往往重复, 发现这个方法还可以, 一个指针指针解决遍历问题.代码如下所示: 代码如下:#include <stdio>static char *menu[] = { “1 — push one item./n”, “2 — pop one item./n”, ...
  • 类似快速排序中的POTITION函数,两个指针,一个指针P1依次向后遍历判断是不是奇数,另一个P2保持一个特性,就是P2指针前的数字都是P1判断过的奇数,后面一直到P1指针的位置都是判断过的偶数,当P1新找到一个奇数...
  • 一、用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = 0; i < 4; i++) { 6 printf("a[%d] = %d \n", i,...
  • 声明:为了方便书写代码,用到了C++的引用调用特性和iostream作为输入输出,读者可以使用指针调用和scanf_s/print语句实现相同效果 tips:有疑问可以在下面交流,我会尽量回复的 头文件heads.h #pragma once #...
  • C语言实验指针

    2020-10-14 23:02:53
    2.掌握用指针访问数组的方式。 3.掌握指针变量作为函数参数的使用方式。 4. 掌握用指针访问字符串的方式。 二、实验环境: Visual C++ 三、实验内容: (写出主要的内容) 1. 运行教材例题8.7和8.12的程序,了解遍历...
  • C语言中,对于结构体数组,我们可以利用指针的偏移量来获取我们想要的值的位置。在go中我们怎么使用C指针和偏移量进行运算呢?下面的文字中C指的是C语言 利用cgo作为桥梁,遍历C结构体数组 unsafe.Pointer在C语言...
  • c语言指针和数组下标

    千次阅读 2015-04-20 23:03:50
    分别用指针和数组下标的方式将输出数组的全部元素。 程序分析: 1.首先,要明白用数组下标和用指针访问数组中的值的区别。本程序中均写了一个printf_array函数来实现这一要求。 2.使用数组的时候函数参数是不同的,...
  • C语言-指针和字符串

    2014-10-10 10:54:49
    字符串回顾一、用指针遍历字符串的所有字符二、用指针直接指向字符串三、指针处理字符串的注意 说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你...
  • 还有就是如果直接结构体指针函数,应该如何改能实现一样的功能 //学生结构体,包含数据:学号、姓名、性别、毕业学校、初试分数、复试分数 //按照学号递增插入信息 //按照学生姓名查询学号和成绩 #include ...
  • C语言函数的指针参数,使得函数"返回"多个值简单的案例深夜无聊而引发的问题回归正题简单的案例2.0链表中"迷人"的指针再度分析 简单的案例 深夜无聊而引发的问题 一般来说,在C语言中一个函数顶多只能返回一个值...
  • //使每个指针指向一个结构体数组元素 for(i=0;i;i++) { p[i]=&stu[i]; } struct student *temp; //冒泡排序法排序(从大到小) for(i=0;i;i++) {//遍历sum_stu-1轮 for(j=0;j;j++) {//...
  • 1.需要改变实参的时候,只能用指针. 2.传递大型结构并且"只读"其元素的时候, 因为大型结构通过值传递,需要拷贝其每个元素,这样效率太低. 3.需要遍历数组或频繁引用其元素时,这样效率比使用下标高. 4.动态分配空间时,...
  • 比如,有的班级有100人,而有的班只有30人,如果要同一个数组先后存放不同班级的学生数据,则必须定义长度为100的数组.如果事先难以确定一个班的最多人数,则必须把数组定得足够大,以能存放任何班级的学生数据.显然这将...
  • 三数之和的求解采用双指针,对其进行从两边往中间遍历的方式,找到sum==0的数组下标,并输出。题目要求:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有...
  • C语言子函数返回二维数组讨论

    千次阅读 2020-08-22 20:41:08
    C语言中,在子函数中将一个二维数组返回 都知道,在子函数中,一定不能返回一个局部变量的指针,局部变量在子函数中进行创建,子函数调用结束后,该指针将被释放掉。 如果被指针所指向的该内存空间被别的程序占用着...
  • //一,指针指向一维数组元素 ...//二,用指针遍历数组元素 1,普通;用数组下标来遍历元素 int a[4]={1,2,3,4}; int i; for(i=0;i<4;i++) { printf(“a[%d]=%d\n”,i,a[i]); } 2,指针遍历数组元素 in...
  • 一、用指针遍历字符串的所有字符 二、用指针直接指向字符串 三、指针处理字符串的注意 说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还...
  • 在没有C语言之前还没有指针这个概念,但是那个时候就已经有和... 那就是用数组来代替指针,静态链表在进行数据遍历的时候是依靠前一个结点存储的下一个结点的地址来进行遍历。并且可以将所有零散的空间利用起来,...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 153
精华内容 61
关键字:

c语言用指针遍历数组

c语言 订阅