指针和数组常见面试题

我们这篇博客主要用来写一些指针和数组的题.
问题涉及到指针和数组,我们就有些注意事项先要了解一下:
1.C语言中,数组名经常会隐式转化为指针;
指针也可以用[ ]的方式取下标,行为上类似于数组。

2.指针的大小为固定值(32位:4字节 64位;8字节),只要是指针,就是这么大,无论你是字符指针,数组指针还是二级指针.
3.sizeof()就是求字节数的.
4.strlen的类型是const char *–要注意只有匹配此数据类型才可以求解字符串长度.(注意是字符串)也就是说花括号定义的不可以!!

(花括号int的sizeof())

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
   
int arr[] = {
    1, 2, 3, 4 };
	printf("%d\n", sizeof(arr)); // 16
	printf("%d\n", sizeof(arr + 0)); // 4 求 sizeof(int*)
	printf("%d\n", sizeof(*arr)); // 4, 求 sizeof(int)
	printf("%d\n", sizeof(arr + 1)); // 4, 求 sizeof(int*)
	printf("%d\n", sizeof(arr[1])); // 4, 求 sizeof(int)
	printf("%d\n", sizeof(&arr));// 4, 求 sizeof(int(*)[4]);
	printf("%d\n", sizeof(*&arr));// 16, 求 sizeof(int[4]);
	printf("%d\n", sizeof(&*arr));// 4, 求 sizeof(int*)
	printf("%d\n", sizeof(&arr + 1)); // 4, 求 sizeof(int(*)[4])
	printf("%d\n", sizeof(&arr[0])); // 4, 求 sizeof(int*)
	printf("%d\n", sizeof(&arr[0] + 1)); // 4, 求 sizeof(int*)
	system("pause");
	return 0;
}

在这里插入图片描述

1.求的是数组整体的元素所占的字节数,为int;
2.因为涉及加减,隐式转换发生,为* int;
3.* arr解引用,证明arr隐式转换,在解引用,是1,为int;
4.同2
5.arr[1]是取下标操作,就是2这数字,为int;
6.数组指针,为int(*)[4];
7. *&arr,数组指针解引用指向数组整体;求int[4];
8. & *arr;(首元素)1的地址;
9. 数组指针+1也是指针,所以是4;
10. 0号元素,也就是数字1的地址。所以也是4。
11.第二个元素,数字2的地址。

(花括号ichar的sizeof())

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
   
char arr[] = {
    'a', 'b', 'c', 'd', 'e', 'f' };
	printf("%d\n", sizeof(arr)); // 6, sizeof(char[6])
	printf("%d\n", sizeof(arr + 0)); // 4, sizeof(char*)
	printf("%d\n"
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值