常见C语言基础题说明一

一.  简介

整理一些C语言常见的基础笔试题。

假如系统是 32位计算机的情况下,字节对齐方式为 4字节对齐。计算如下题目。

二.  常见C语言基础笔试题

1.  计算 sizeof(数组名), sizeof(指针),strlen(数组名) 大小

计算如下的变量的值:

#include <stdio.h>
 
int main(void)
{ 
    char str[] = "123456";
    char *ptr;
    int b[100] = "0123456789";
    
    printf("%d, %d, %d\n", sizeof(str), sizeof(ptr), strlen(str));
    printf("%d\n", sizeof(b));
    return 0;
}

打印结果如下:

7, 4, 6
400

分析:

sizeof在编译时期就计算出来,strlen在运行之后才能计算出来。

strlen 计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。strlen参数只能是char*,且必须是以 '\0' 结尾。

sizeof 计算声明后所占的内存数(字节大小),不是实际长度。

为什么需要 sizeof ?
主要是因为在不同平台下各种数据类型所占的内存字节数不尽相同(譬如int在32位系统中为4字节,在16位系统中为2字节···)。所以程序中需要使用 sizeof 来判断当前变量/数据类型在当前环境下占几个字节。

sizeof(str):char str[] 这里的  str是一个数组,sizeof(str) 即计算数组,因为内部是字符串,所以包括 '\0' 位置,所以为  sizeof(str)为 6+1,即 7。

sizeof(ptr) ptr是一个  char类型的指针,注意是指针,而 32位系统中 指针所占用的字节大小为 4字节,所以,sizeof(ptr) 为 4,。也就说无论什么类型的指针,sizeof(ptr) 都是 4字节(对于 32位计算机系统而言)。

sizeof(b) :因为 b为 int 类型数组,而一个 int类型占 4字节(32位计算机系统中)所以,sizeof(b) 为 4*100,即 400。

strlen(str):  strlen() 是计算字符串长度,不包括字符串结束符 '\0'。所以, strlen(str)为 6.

2.  结构体指针 + 1

结构体指针加 1操作:

#include <stdio.h>
#include <stdlib.h>

typedef struct tagDev_INFO_S{
    int a;
    int b;
    int c;
    int d;
} DEV_INFO_S;
 
int main(void)
{ 
    DEV_INFO_S * pstDevInfo = malloc(sizeof(DEV_INFO_S)*8);

    printf("pstDevInfo: %p\n", pstDevInfo);
    printf("pstDevInfo+1: %p\n", pstDevInfo+1);

    return 0;
}

打印结果如下:

可以看出,结构体指针 +1的意思就是,也就是加一个步进,步进的大小就是指向的类型的 sizeof的结果。

这里结构体大小为  4字节*4 = 16字节,结构体指针加 1,也就是 相差一个结构体大小即 16个字

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值