C语言初阶面试题---囊括90%知识点

C初阶

1.数组和指针

1.1什么是指针数组,什么是数组指针?

**指针数组:是指的数组里面装着指针,它是一个数组,定义形式可以理解为int (a[10]),说明括号里面的a是一个数组,包含了10个元素,每一个元素的类型为 int

 int a = 16, b = 932, c = 100;
 //定义一个指针数组
 int *arr[3] = {&a, &b, &c};//也可以不指定长度,直接写作 int *arr[]
 //parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针,
 //它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。
 //arr 第 0 个元素的类型为 int *,所以在定义 parr 时要加两个 *。
 int **parr = arr;
 printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);//16, 932, 100
 printf("%d, %d, %d\n", **(parr+0), **(parr+1), **(parr+2));//16, 932, 100

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3l7g2PMb-1691159264432)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230803202547396.png)]

数组指针: 是一个指向数组的指针,他其实还是一个指针,只不过是指向数组 **定义形式为:*int(*a)[10],因为[]的优先级高于,所以必须添加(*a)。

在32位系统下任何类型的指针所占内存大小都为4个字节,至于它指向的数组占多少字节,具体要看数组的大小。总之,数组指针即为“指向数组的大小”。

详细了解http://t.csdn.cn/V1qUT

1.2函数指针,要如何定义一个函数指针?

函数指针的本质是一个指针变量,该指针指向这个函数,总结就是函数指针就是指向函数的指针
**定义格式:**类型说明符(*函数名)(参数)

**详细了解:**https://huaweicloud.csdn.net/63a56868b878a54545946a07.html?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaiduactivity-8-80428882-blog-125746492.235%5Ev38%5Epc_relevant_sort_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaiduactivity-8-80428882-blog-125746492.235%5Ev38%5Epc_relevant_sort_base2&utm_relevant_index=13&q=sizeof%20%E5%92%8C%20strlen%E7%9A%84%E5%8C%BA%E5%88%AB

int (*fun)(int x,int y);
函数指针是需要把一个函数的地址赋值给它,有两种写法:
fun = &Function;
fun = Function;
调用函数指针的方式也有两种:
x = (*fun)();
x = fun();
示例:
int add(int x,int y){
    return x+y;
}
int sub(int x,int y){
    return x-y;
}
//函数指针
int (*fun)(int x,int y);

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //第一种写法
    fun = add;
    qDebug() << "(*fun)(1,2) = " << (*fun)(1,2) ;
	//第二种写法
    fun = &sub;
    qDebug() << "(*fun)(5,3) = " << (*fun)(5,3)  << fun(5,3);

    return a.exec();
}

1.3 sizeof 和 strlen的区别?

  1. strlen是一个库函数,sizeof是一个运算符号
  2. strlen计算的是’\0’之前的字符个数,计算时不包含’\0’,遇到’\0’才结束。sizeof计算的是所占空间内存大小单位是字节它计算时包含’\0’。
  3. sizeof的类型是无符号整型,strlen只能用char做参数,sizeof可以用类型做参数。
	char arr1[] = "hello";
	char arr2[] = { 'h','e','l','l','o' };
	char arr3[] = { 'h','e','l','l','o','\0'};
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));//随机值,只有遇到'\0'才结束,而arr2中没有'\0'
	printf("%d\n", strlen(arr3));

**详细了解:**http://t.csdn.cn/0zgHt

总结:计算数组的大小和指针大小的题要多做,非常容易搞错

2.数组存储

2.1原码、反码、补码的存储规则

**数据的存储方式是:**正数和负数在内存中的存储:原码、反码、补码所有的数据都是在内存中以补码的形式存在。

正数的原码、反码、补码都是一样的,32位,
负数
原码:最高位表示符号位,1表示负数,0表示正数。

反码:原码除了符号位之外,1变0,0变1

补码:在反码的基础上加1

2.2 什么是大小端,如何判断大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我中意你呀丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值