前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >寒假每日提升(1)[适合复习使用]

寒假每日提升(1)[适合复习使用]

作者头像
薛定谔方程难
发布2024-01-23 16:20:40
790
发布2024-01-23 16:20:40
举报
文章被收录于专栏:我的C语言我的C语言

不傲才以骄人,不以宠而作威。 ——诸葛亮

数组

1、相关数组“+1”的使用

值得一提的是对于**+1**的使用,可能会有所不同。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	char s[] = { '1','1','1','1','5' };
	printf("%c\n",*s);
	printf("%c\n",*s+1);
	printf("%c\n", *(s + 1));
	return 0;
}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在其中重要的是,&s+1和s+1的区别,相对于*s+1来说,更难理解,对于 *s+1来说的话,由于 *的优先级是高于+的,所以,先是应该解引用第一位的字符,然后得到之后再加上1的值,所以才会在后头显示的是2。而对于s+1应该就是字符数组的第一位加上1,到第二位置。而对于&s+1是跳过整个的字符数组到下一个区域,充分理解,也就是相当于可以将此运用到二维数组的使用传参。

2、数组传参

关于数组传参的问题,需要以下几点关注 1、函数的形式要和函数的实参个数相匹配 2、函数的实参是数组,形参也可以写成数组 3、形参如果是以为数组,数组的大小可以省略不写 就例如这样子

代码语言:javascript
复制
void fun(int a[]);

4、形参如果是二维数组的话,行可以省略,但是列不行 5、数组传参,形参不会创建新的数组 6、数组操作的和实参是同一个数组(并不是意味着形参指向的改变会改变实参的指向位置) 那么就会有一个好问题,请看! 已知数组D的定义是 int D[4][8]; 现在需要把这个数组作为实参传递给一个函数进行处理。下列可以作为对应的形参变量说明的是【多选】( ) A: int D[4][] B: int *s[8] C: int(*s)[8] D: int D[][8] 答案:C,D 解析:由于之前的关注说明行可以省略,但是列不可以,所以A不对。由于B是指针数组,可以看之前的文章,这里讲述了指针数组和数组指针这就不再赘叙,很显然B是错的。那C为什么是对的呢?首先是因为是数组指针,对应的是存放数组的指针,并且数组还是8个元素的。并且在此时的情况之下,(s+1)或者是s[1]也就是代表的第二行的数组。对于D来说,很明显是正确的。 相比如此,也差不多很明白的知道了数组传参,以及二维数组的传参的细节了

3、理解数组传参细节,使用malloc创建二维数组

对于malloc来说,在官网的定义是这样的。

在这里插入图片描述
在这里插入图片描述

也就是void类型,所以在这样的基础之上,我们可以理解上一部分的数组指针,利用其特点,创造出二维数组,具体请看下面代码。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
int main() {
    int m = 3; // 三行
    int n = 4; // 四列

    // 使用 malloc 分配内存
    int** matrix = (int**)malloc(m * sizeof(int*));
    for (int i = 0; i < m; ++i) {
        matrix[i] = (int*)malloc(n * sizeof(int));
    }
    // 初始化二维数组
    int count = 1;
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            matrix[i][j] = count++;
        }
    }
    // 打印二维数组
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            printf("%2d ", matrix[i][j]);
        }
        printf("\n");
    }
    // 释放内存
    for (int i = 0; i < m; ++i) {
        free(matrix[i]);
    }
    free(matrix);
    return 0;
}

需要关注的是malloc的区域,在结束之记得释放掉。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组
    • 1、相关数组“+1”的使用
      • 2、数组传参
        • 3、理解数组传参细节,使用malloc创建二维数组
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档