当前位置: 首页 > article >正文

07-01-指针与数组

1 动态创建二维数组

int rows, cols;
printf("请输入二维数组行数:");
scanf(" %d", &rows);
printf("请输入二维数组中列数:");
scanf(" %d", &cols);

//外层二维数组----二维指针
int** arr= (int**)malloc(rows * sizeof(int*));   //int*占8个字节
for (int i = 0;i < rows;i++) {
//动态创建一个指针----一维数组
    arr[i] = (int*)malloc(cols * sizeof(int));
    for (int j = 0;j < rows;j++) {
        arr[i][j] = j + 10;
        printf("%d ", arr[i][j]);
    }
    printf("\n");
}
free(arr);

2 指针与数组专题

int a = 10;
int* p = &a;
int** p1 = &p;//二级指针
printf("%d ", **p1);//取二级指针的值


//1.一维数组和指针
int arr[3] = { 10,20,30 };
//数组名是地址,相当于第一个元素的地址,数组名也是个常量,一但初始化完成,数据不能改变
int* ptr=NULL;//指针变量,可以对ptr赋值
ptr = arr;   //ptr=&arr[0];

//2.使用指针来访问数组             步长:数据类型的长度  ptr+1每次从首元素开始,ptr++每次以当前元素开始

//取元素20
printf("%d %d %d %d ", arr[1], *(arr + 1), *(ptr + 1), ptr[1]);//20 20 20 20

//取元素20
ptr++;
printf("%d %d ", *ptr, ptr[0]);//20 20 

//获取数组的最大值
int arr[3] = { 10,20,30 };
//方法一  假设第一项为最大值
int max = arr[0];
for (int i = 0;i < 3;i++) {
    if (max < arr[i]) {
        max = arr[i];
    }
}
printf("max=%d ", max); //max = 30

//方法二 使用指针
int* p = arr;
int max1 = *p;
for (int i = 0;i < 3;i++) {
    if (max1 < *(p + i)) {
        max1 = *(p+i);
    }
}    
printf("max1=%d ", max1); //max1 = 30

3 指针带下标的使用

int a[5] = { 10,20,30,40,50 };
int* p = a;
for (int i = 0;i < 5;i++){
    printf("%d ", p[i]);
}
for (int i = 0;i < 5;i++) {
    printf("%d ", p[0]);//p指向谁,谁是起点 例:当前p 指向a[3],则p[2]并不代表a[2],而是 a[3+2],即 a[5]
    p++;
}
printf("%p %p ", a, &a);// 000000CAF1F9F698 000000CAF1F9F698 
printf("%p %p %p ",a, a + 1,&a + 1);

//不是同一个地址 000000CAF1F9F698 000000CAF1F9F69C 000000CAF1F9F6AC 

4 指针和数组

4.1普通指针

int a = 10;
int* ptr = &a;

int arr[5] = { 10,20,30 };
int* ptr1 = arr;

4.2 数组指针     定义方式:数据类型(*ptr)[size]      优先级:( )>[ ]> *

int arr[10] = { 10,20,30 };
int(*ptr)[10] = &arr;//ptr是一个指向包含10个整数的数组的指针

int matrix[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };    // 声明一个3x4的二维数组
int arr[10] = { 10,20,30 };
int(*ptr)[4] = matrix; //ptr是一个指向包含4个整数的数组的指针,这个数组本身是一个二维数组的行

//数组方法  访问第一行第二列的元素
printf("%d ", matrix[0][1]);   //2
//指针方法  访问第一行第二列的元素
printf("%d ", (*ptr)[1]);     //2

//数组方法  访问第二行第一列的元素
printf("%d ", matrix[1][0]);//5
//指针方法  访问第二行第一列的元素
printf("%d ", (*(ptr+1))[0]);//5

//数组方法  访问第三行第三列的元素
printf("%d ", matrix[2][2]);//11
//指针方法  访问第二行第一列的元素
ptr++;
ptr++;
printf("%d ", (*ptr )[2]);//11

4.2.1遍历

for (int i = 0; i < 3; i++) { // 遍历行  
    for (int j = 0; j < 4; j++) { // 遍历列 
        printf("%d ", (*ptr)[j]);//    printf("%d ", matrix[i][j]);
    }
    printf("\n");    //1 2 3 4
                       //5 6 7 8
                     //9 10 11 12
    ptr++; // 移动到下一行  
}

4.3 指针数组 

int* arr[10];//arr是数组名  它里面的元素是指针

int a = 10;
int b = 20;
int c = 30;
int* arr[3] = { &a,&b,&c };
for (int i = 0;i < 3; i++) {
    printf("%d ", *arr[i]);
}

    int line1[] = { 1,2,3,4 };// 矩阵第一行
    int line2[] = {5,6,7,8};
    int line3[] = {9,10,11,12};
    int* ptr[3] = {line1,line2,line3};

    for (int i = 0;i < 3;i++) {
        for (int j = 0;j < 4;j++) {
            printf("%d ", ptr[i][j]);
        }
    }

数组指针vs指针数组

(1)数组指针一定是指针

int(*ptr)[10];  //ptr是指针变量   指针变量指向的是包含十个元素的一维数组  应用场景:二维或多维

(2)指针数组一定是数组    数组中的元素是指针

int* arr[10];//arr是数组名,里面的元素是指针


http://www.kler.cn/a/450940.html

相关文章:

  • 【C++】模板与泛型编程(一):定义模板,控制实例化、效率与灵活性
  • ML-Agents 概述(二)
  • Windows 11 安装 Dify 完整指南 非docker环境
  • 羊城杯2020 easycon
  • 【python高级】342-TCP服务器开发流程
  • 如何打造用户友好的维护页面:6个创意提升WordPress网站体验
  • OneCode:开启高效编程新时代——企业定制出码手册
  • component-后端返回图片(数据)前端进行复制到剪切板
  • 008 Qt_显示类控件_QLabel
  • 【es6复习笔记】集合Set(13)
  • MongoDB 更新文档
  • Mac M1使用pip3安装报错
  • C++软件设计模式之装饰器模式
  • 创建仓颉编程语言的第一个项目
  • 【2024】Merry Christmas!一起用Rust绘制一颗圣诞树吧
  • GAMES101:现代计算机图形学入门-笔记-11
  • 数据结构与算法Python版 散列与区块链
  • 前端常用算法集合
  • HTTP—01
  • MQTT协议在树莓派上的安全性和性能测试及其在物联网应用中的应用
  • 【网络云计算】2024第52周-每日【2024/12/24】小测-理论实操-解析
  • docker 安装minio
  • SpringBoot的Thymeleaf做一个可自定义合并td的pdf表格
  • LeetCode33题:搜索旋转排序数组(原创)
  • 【VMware虚拟机】安装win10系统教程双机可ping通
  • leetcode hot100回文字符串的链表