必备技能之——数组作为参数和返回值问题详解,末尾有字符数组和字符串的区别和小例题

2023-05-16

前段时间沉迷于GTA系列游戏无法自拔,
有一段时间没有更了在这里插入图片描述

数组作为参数问题

将数组作为参数进行传递无疑是一个非常常见的一个问题了,在这里先小谈一波
在计算机编程问题上,我们将数组作为参数进行传递的时候,传入的是数组的首地址,如果不够明白具体意思呢,就看一个很简单的例子:

#include<stdio.h>
int sum(int a[]){
  int ans=0;
  for(int i=0;i<sizeof(a);i++)
  ans+=i;
  return ans;
}

这个程序大家在编译器上是得不到正确答案的,问题就在于:sizeof(a)这个东西,他无法得到数组真正的大小,在数组传递的时候,只有首地址进行了传递,也就是只有第一个数组值进行了传递,后面的没传到
所以,我们常以这种形式:
int a[]=int*a (这两个是等价滴)
在无法知道数组里面到底具体有多少个元素的时候,我们常常会在函数里多增加一个参数:
修改后:

int sum(int a[],int n)
{
 int ans=0;
 for(int i=0;i<n;i++)
  ans+=i;
  return ans;
}

在这里插入一个我个人比较常用的习惯,就是我一般会在数组的第一个即a[0]来统计数组的总个数,这个习惯也伴随了我学习编程这一年的时间,这个习惯的好处也给我带来了一定的便利(具体看情况在这里插入图片描述

字符数组、字符串

在上面说过传递的是一个地址,那么假如现在有一个a数组,则a+1就代表a[1],这也就是指针加法的体现,理解这个还是很简单的,比较难的还是有关于字符数组和字符串这方面很容易乱套,下面在我的理解中讲一下区别:在这里插入图片描述
首先就是它们的定义就很不一样
1、字符串指针变量本身是一个变量,用于存放bai字符串的首地址。字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。

2、字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
当然最重要的就是他们对待指针的方式不同
比如:char *ps=”C Language”;可以写成char *ps;ps=”C Language”;
数组方式char st[]={”C Language”};不能写成char st[20]; St={”C Language”};只能对字符数组的各元素逐个赋值。

像这样:在这里插入图片描述

前段时间我有一个朋友问了我一道题,非常有意思,做一个分享:
在这里插入图片描述
这道题的答案大家可以直接在编译器上试试,这道题如果能够理解那么你对于数组这一方面包括指针的运算方面掌握以及字符串方面还是很可以的,很值得去思考。在这里插入图片描述
当然在我目前看来这道题还是有难度的,在这里我不详细说明了,有几张调试的图片供大家思考

刚进去sub函数的状态:
在这里插入图片描述
第一个while循环结束后状态:
在这里插入图片描述
剩下的留给大家思考了,有问题或者有想法的可以私信或者留言在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

必备技能之——数组作为参数和返回值问题详解,末尾有字符数组和字符串的区别和小例题 的相关文章

随机推荐