100条经典C语言题第二天(10-20)

11.char szstr[10];
strcpy(szstr,"0123456789");
产生什么结果?为什么?
        SZSTR的前10个字符被填充为字符串"0123456789"的字符,但是数组没有留出空间来存储字符串的终止符\0。在C语言中,字符串总是以空字符(\0)结尾,以便函数如strcpy()strlen()printf()等能够正确地识别字符串的结束位置
        【标准答案】长度不一样,出现段错误。
12、数组和链表的区别?
        【标准答案】数组:数据顺序存储,固定大小;
                             链表:数据可以随机存储,大小可动态改变
13、 void main()
{
char aa[10];
printf(“%d”,strlen(aa));
}
会出现什么问题?打印结果是是多少?
        这道题首先应该把void改成int
        其次,数组aa没有被初始化,没有空字符\0,这里的strlen是返回长度  
         【标准答案】sizeof()和初不初始化,没有关系,
        strlen()和初始化有关,打印结果值未知。
 
14、给定结构struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};问sizeof(A) 
        char t:4;   // 4位位域,通常占用1字节,但只使用4位  
        char k:4;   // 4位位域,同样占用1字节,但只使用4位  
        unsigned short i:8; // 8位位域,通常占用2字节,但只使用8位  
        unsigned long m;    // 通常占用4字节,具体取决于平台和编译器
        1+1+2+4=8
         【标准答案】8
/
15、 struct name1{
char str;
short x;
int num;
};求sizeof(name1)?
   char str;       // char 类型通常占用 1 字节  
    short x;        // short 类型通常占用 2 字节  
    int num;        // int 类型通常占用 4 字节 
这里考虑了对齐规则,给出8
在这个例子中, str 占用1字节,不需要对齐。 x 是  short 类型,可能需要对齐到2字节边界,但由于  str 已经占用了1字节, x 可以直接放在  str 后面,不需要额外的填充。 num 是  int 类型,通常需要对齐到4字节边界。因此,在  x 和  num 之间可能需要填充1字节,以确保  num 的起始地址是4字节的倍数
【标准答案】8
16、 struct name2{
char str;
int num;
short x;
};求sizeof(name2)?
1+4+2 = 7
【标准答案】12
考虑填充字节的不会,希望大佬指导一下
17、程序哪里有错误
wap( int* p1,int* p2 )
{
int *p;
*p = *p1;
*p1 = *p2;
*p2 = *p;
}
未初始化P的内存位置
【标准答案】p为野指针
19、 (void *)ptr 和 (*(void**))ptr的结果是否相同?其
中ptr为同一个指针。
  1. (void *)ptr:这是一个类型转换,将 ptr 转换为一个 void * 类型的指针。void * 是一个通用指针类型,可以指向任何数据类型。这种转换不会改变 ptr 所指向的内存地址,只是改变了指针的类型。

  2. (*(void**))ptr:这是一个指针的解引用和类型转换的组合。首先,ptr 被解引用为一个 void ** 类型的指针(即指向指针的指针),然后这个解引用得到的指针又被转换为一个 void * 类型的指针。如果 ptr 实际上是一个指向 void * 类型指针的指针,那么这种解引用和类型转换的组合会得到与 (void *)ptr 相同的结果。

【标准答案】(void *)ptr 和 (*(void**))ptr值是相同的
20、要对绝对地址0x100000赋值,我们可以用
(unsigned int*)0x100000 = 1234;
那么要是想让程序跳转到绝对地址是0x100000去执行
,应该怎么做?
【标准答案】*((void (*)( ))0x100000 ) ( );
首先要将0x100000强制转换成函数指针,即:
(void (*)())0x100000
然后再调用它:
*((void (*)())0x100000)()
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值