千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > C语言面试题之基础数组

C语言面试题之基础数组

来源:千锋教育
发布人:wjy
时间: 2022-06-07 15:30:00 1654587000

  二维数组在物理上以及逻辑上的数组维度

  二维数组在逻辑上是二维的,在物理上是一维的

  数组名作为类型、地址、对数组名取地址的区别

  数组名作为类型:代表的是整个数组的大小

  数组名作为地址:代表的是数组首元素的地址

  对数组名取地址:代表的是数组的首地址

  描述一维数组的不初始化、部分初始化、完全初始化的不同点

  不初始化:如果是局部数组 数组元素的内容随机 如果是全局数组,数组的元素内容为0

  部分初始化:未被初始化的部分自动补0

  完全初始化:如果一个数组全部初始化 可以省略元素的个数 数组的大小由初始化的个数确定

  数组的分类

  数组的分类主要是:静态数组、动态数组两类。

  静态数组:例如int arr[5];在程序运行前就确定了数组的大小,运行过程不能更改数组的大小。

  动态数组:主要是在堆区申请的空间,数组的大小是在程序运行过程中确定,可以更改数组的大小。

  数组的特点

  同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的

  对数值数组操作的时候需要注意啥

  对任意数值数组操作的时候必须逐个元素操作

  数组按维度分类

  分为一维数组、二维数组、多维数组

  如果数组元素不初始化

  如果是全局数组:不初始化元素内容为0

  如果是局部数组:不初始化元素内容不确定(随机值)

  如何通过数组名访问数组元素

  数组名+[数组元素的有效下标]

  如果有数组int arr[5]那么sizeof(arr)的结果

  20字节

  如果有数组int arr[5]那么sizeof(arr[0])的结果

  4字节

  如果有数组int arr[5]那么sizeof(arr)/sizeof(arr[0])的结果

  5

  如果有数组int arr[5]={[2]=10, [4]=30};则该数组每个元素的值

  0 0 10 0 30

  如果有二维数组int arr[3][4];则sizeof(arr)的结果

  48字节

  如果有二维数组int arr[3][4];则sizeof(arr[0])的结果

  16字节

  如果有二维数组int arr[3][4];则sizeof(arr[0][0])的结果

  4字节

  如果有二维数组int arr[3][4];则sizeof(arr)/sizeof(arr[0])的结果

  3

  如果有二维数组int arr[3][4];则sizeof(arr[0])/sizeof(arr[0][0])的结果

  4

  如果有二维数组int arr[3][4];则sizeof(arr)/sizeof(arr[0][0])的结果

  12

  二维数组初始化的方式有几种

  分段初始化(部分初始化,全部初始化)

  连续初始化(部分初始化,全部初始化)

  如果有两个二维数组int arr1[3][4]={ {1,2}, {5,6}, {9,10,11} }; int arr2[3][4]={ 1,2, 5,6, 9,10,11}; 则arr1[1][2] +arr2[1][2]运行结果:

  11

  谈谈char arr1[]={'h','e','l','l','o'}; 和char arr2[]="hello"; 两个数组的区别

  字符数组arr1逐个元素初始化,系统不会加'\0'字符串结束符,所以arr1的大小为5字节

  字符数组arr2是以字符串方式初始化,系统会自动在字符串末尾加'\0',所以arr2的大小为6字节

  谈谈字符数组的元素遍历方式

  可以逐个元素使用%c数组

  可以使用%s输出整个字符数组(需要注意:%s遇到‘\0’结束)

  谈谈gets和fgets给字符数组获取字符串时的不同点

  gets获取字符串的时候不会对获取的长度做出判断,容易造成字符数组越界

  fgets获取字符串的时候会对获取的长度做出判断,不会造成字符串越界

  fgets相较于gets更安全

  不使用strlen函数完成字符串长度测量

C语言面试题之基础数组1614

 

  注意主函数记得调用test03();

  有两个字符数组str1 str2, str1获取键盘输入,将str1的字符串拷贝到 str2中(不允许使用strcpy)

C语言面试题之基础数组1699

 

  注意主函数记得调用test03();

  有以下两个数组str1,str2 将str2的字符串 追加到 str1的尾部

C语言面试题之基础数组1762

 

  注意主函数记得调用test04();

  从字符串中 查找某个元素(第一次出现的下标)

C语言面试题之基础数组1808

 

  键盘输入第一个字符串str1,输入第二个字符串str2,再输入位置pos,要求将str2字符串插入到字符串str1的pos位置

void test06() {

    char str1[128]="";

    printf("亲输入一个字符串:");

    fgets(str1,sizeof(str1),stdin);

    str1[strlen(str1)-1]=0;

    

    char str2[128]="";

    printf("亲输入第二个字符串:");

    fgets(str2,sizeof(str2),stdin);

    str2[strlen(str2)-1]=0;

    

    int pos=0;

    printf("请输入要插入的位置:");

    scanf("%d", &pos);

    

    //计算str2的长度

    int len = 0;

    while(str2[len] && ++len);

    

    //i定位到str1的尾部 i也是str1的长度

    int i=0; while(str1[i] && ++i);

    //判断pos位置是否 合法

    if(pos<0 || pos>i) {

        printf("下标%d不无效\n", pos);

        return;//结束函数

    }

    

    //数据是否溢出

    if(i+len>sizeof(str1)) {

        printf("插入会越界,失败\n");

        return;//结束函数

    }

    

    //str1移动数据 预留足够的位置

    while(i>=pos) {

        str1[i+len] = str1[i];

        i--;

    }

    

    //str2的字符串 插入到pos位置上

    int j=0;

    while(str2[j] != '\0') {

        str1[pos] = str2[j];

        pos++;

        j++;

    }

    printf("插入后的结果:%s\n", str1);

}

 

int main(int argc, char *argv[]) {

    test06();

    return 0;

}

  更多关于物联网培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT