前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C】数组和指针练习

【C】数组和指针练习

作者头像
阿伟@t
发布2023-10-10 14:41:05
1720
发布2023-10-10 14:41:05
举报
文章被收录于专栏:cs阿伟

一、数组笔试题解析

知识点: 只要是地址就是4/8个字节  数组名 数组名是数组首元素的地址 但是有2个例外: 1. sizeof(数组名) - 数组名表示整个数组,计算的是整个数组的大小,单位是字节 2. &数组名 - 数组名也表示整个数组,取出的是整个数组的地址 除了这个2个例外,你见到的所有的数组名都表示首元素的地址  sizeof sizeof 是计算对象或者类型创建的对象所占内存空间的大小,单位是字节 sizeof 是操作符,不是函数 strlen strlen 求字符串长度的,计算的是字符串中\0之前出现的字符的个数 统计到\0为止,如果没有看到\0,会继续往后找 strlen 是库函数

1、一维数组题目

题目1:
代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int a[] = {1,2,3,4};
    printf("%d\n",sizeof(a));
    printf("%d\n",sizeof(a+0));
    printf("%d\n",sizeof(*a));
    printf("%d\n",sizeof(a+1));
    printf("%d\n",sizeof(a[1]));
    printf("%d\n",sizeof(&a));
    printf("%d\n",sizeof(*&a));
    printf("%d\n",sizeof(&a+1));
    printf("%d\n",sizeof(&a[0]));
    printf("%d\n",sizeof(&a[0]+1));
return 0;
}

 运行结果:

题目解析:


 2、字符数组题目

题目一:字符
代码语言:javascript
复制
int main()
{
	//字符数组
	char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr + 0));
	printf("%d\n", sizeof(*arr));
	printf("%d\n", sizeof(arr[1]));
	printf("%d\n", sizeof(&arr));
	printf("%d\n", sizeof(&arr + 1));
	printf("%d\n", sizeof(&arr[0] + 1));
	printf("%d\n", strlen(arr));
	printf("%d\n", strlen(arr + 0));
	printf("%d\n", strlen(*arr));
	printf("%d\n", strlen(arr[1]));
	printf("%d\n", strlen(&arr));
	printf("%d\n", strlen(&arr + 1));
	printf("%d\n", strlen(&arr[0] + 1));
	return 0;
}

这里的printf("%d\n", strlen(*arr)); printf("%d\n", strlen(arr[1]))在运行时会报错,所以下面的运行结果不包括这两个,具体原因见后文

 运行结果:

 题目解析:


题目二:字符串

此题目与上述题目类似,若上面的例子已完全掌握,此题将手到擒来

因此,这里只提供运行结果与必要的暗示

代码语言:javascript
复制
int main()
{
    char arr[] = "abcdef";
    printf("%d\n", sizeof(arr));
    printf("%d\n", sizeof(arr + 0));
    printf("%d\n", sizeof(*arr));
    printf("%d\n", sizeof(arr[1]));
    printf("%d\n", sizeof(&arr));
    printf("%d\n", sizeof(&arr + 1));
    printf("%d\n", sizeof(&arr[0] + 1));

    printf("%d\n", strlen(arr));
    printf("%d\n", strlen(arr + 0));
    printf("%d\n", strlen(*arr));
    printf("%d\n", strlen(arr[1]));
    printf("%d\n", strlen(&arr));
    printf("%d\n", strlen(&arr + 1));
    printf("%d\n", strlen(&arr[0] + 1));
    return 0;
}

 题目解析及运行结果:


 题目三:指针变量
代码语言:javascript
复制
char *p = "abcdef";
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(p+1));
printf("%d\n", sizeof(*p));
printf("%d\n", sizeof(p[0]));
printf("%d\n", sizeof(&p));
printf("%d\n", sizeof(&p+1));
printf("%d\n", sizeof(&p[0]+1));
printf("%d\n", strlen(p));
printf("%d\n", strlen(p+1));
printf("%d\n", strlen(*p));
printf("%d\n", strlen(p[0]));
printf("%d\n", strlen(&p));
printf("%d\n", strlen(&p+1));
printf("%d\n", strlen(&p[0]+1));

题目解析及运行结果


 3、二维数组题目

代码语言:javascript
复制
int a[3][4] = {0};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(a[0][0]));
printf("%d\n",sizeof(a[0]));
printf("%d\n",sizeof(a[0]+1));
printf("%d\n",sizeof(*(a[0]+1)));
printf("%d\n",sizeof(a+1));
printf("%d\n",sizeof(*(a+1)));
printf("%d\n",sizeof(&a[0]+1));
printf("%d\n",sizeof(*(&a[0]+1)));
printf("%d\n",sizeof(*a));
printf("%d\n",sizeof(a[3]));

题目解析及运行结果:


二、指针笔试题

笔试题1:
代码语言:javascript
复制
int main()
{
    int a[5] = { 1, 2, 3, 4, 5 };
    int *ptr = (int *)(&a + 1);
    printf( "%d,%d", *(a + 1), *(ptr - 1));
    return 0;
}
//程序的结果是什么?

 笔试题2:
代码语言:javascript
复制
/由于还没学习结构体,这里告知结构体的大小是20个字节
struct Test
{
    int Num;
    char *pcName;
    short sDate;
    char cha[2];
    short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{
    printf("%p\n", p + 0x1);
    printf("%p\n", (unsigned long)p + 0x1);
    printf("%p\n", (unsigned int*)p + 0x1);
    return 0;
}

题目解析及运行结果:


笔试题3:
代码语言:javascript
复制
int main()
{
	int a[4] = { 1, 2, 3, 4 };

	int* ptr1 = (int*)(&a + 1);
	int* ptr2 = (int*)((int)a + 1);
	printf("%x,%x", ptr1[-1], *ptr2);

	//%p - 是打印地址
	//%x - 是16进制的格式打印
	return 0;
}

题目解析及运行结果:


笔试题4:
代码语言:javascript
复制
#include <stdio.h>
int main()
{
    int a[3][2] = { (0, 1), (2, 3), (4, 5) };
    int *p;
    p = a[0];
    printf( "%d", p[0]);
    return 0;
}

题目解析及运行结果:


 笔试题5:
代码语言:javascript
复制
int main()
{
    int a[5][5];
    int(*p)[4];
    p = a;
    printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
    return 0;
}

题目解析及运行结果:


笔试题6:
代码语言:javascript
复制
int main()
{
    int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int *ptr1 = (int *)(&aa + 1);
    int *ptr2 = (int *)(*(aa + 1));
    printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));
    return 0;
}

题目解析及运行结果:


 笔试题7:
代码语言:javascript
复制
#include <stdio.h>
int main()
{
    char *a[] = {"work","at","alibaba"};
    char**pa = a;
    pa++;
    printf("%s\n", *pa);
    return 0;
}

题目解析及运行结果:


笔试题8:
代码语言:javascript
复制
int main()
{
    char* c[] = { "ENTER","NEW","POINT","FIRST" };
    char** cp[] = { c + 3,c + 2,c + 1,c };
    char*** cpp = cp;
    printf("%s\n", **++cpp);
    printf("%s\n", *-- * ++cpp + 3);
    printf("%s\n", *cpp[-2] + 3);
    printf("%s\n", cpp[-1][-1] + 1);
    return 0;
}

题目解析及运行结果:

结语:

这里我们关于指针笔试题的内容就介绍完了,如果小伙伴还有不理解的内容,可以参考之前关于指针进阶的博文。 文章中某些内容我们之前有介绍,所以只是一笔带过,还请谅解。 希望以上内容对大家有所帮助👀,如有不足望指出🙏

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、一维数组题目
    • 题目1:
    •  2、字符数组题目
      • 题目一:字符
        • 题目二:字符串
          •  题目三:指针变量
          •  3、二维数组题目
          • 二、指针笔试题
            • 笔试题1:
              •  笔试题2:
                • 笔试题3:
                  • 笔试题4:
                    •  笔试题5:
                      • 笔试题6:
                        •  笔试题7:
                          • 笔试题8:
                          • 结语:
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档