【无标题】

1.长度和宽度

sizeof和strlen的区别

#include<stdio.h>
#include<string.h>
int main(){
	char s[]="i love linux\0\0\0";
	int a=sizeof(s);
	int b=strlen(s);
	printf("%d %d",a,b);
} 

这个结果是16和12.其原因是sizeof比strlen多记录\0的数量。其中字符串原本自带了\0所以sizeof得到的a会比b多4.

2.箱子大小和装入物品的顺序

struct test1{
	int a;
	short b;
	double c;
};
struct test2{
	short b;
	int a;
	double c;
};

这两个是输出是相同的,都是16,这个考的是结构体对齐的问题,相关的知识点可以在我之前几年的题解中得到解释 。 第一个test1开始的int 占四个字节然后short占两个,因为八个算在一起所以不会移走,但double站八个字节所以只能挪走,所以是十六个字节,第二个test2相似

3.输出二维数组

#include<stdio.h>
#define M 3
#define N 2
int main(){
    int **addOne(int a[M][N]);
    int a[M][N]={{1,1},{2,2},{3,3}};
    int i,j;
    int **b = addOne((int **)a);
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            printf("%d\t",*((int *)b+N*i+j));
    
}
int **addOne(int a[M][N]){
    int **b =(int **)malloc(M*sizeof(int *));
    for (int i=0;i<M;i++)
        b[i]=(int *)malloc(N*sizeof(int));
    int i,j;
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            *((int *)b+N*i+j) = *((int *)a+N*i+j) + 1;
                 return b;
}

4. 

  1. 传值:传值,实际是把实参的值赋值给行参,相当于copy。那么对行参的修改,不会影响实参的值 。
  2. 传址: 实际是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都指向同一个对象,因此对形参的修改会影响到实参

可以看作定义一个a、b,*p、*p2,其中a、b与*p、*p2的地址空间是一样的,那么当*p1、*p2被修改时,a、b也会跟着发生变化,因为此时二者占用了同一块空间,当任意一者使空间里的内容发生变化时,二者都会做相同变化。

题目在曾经的博客中存在相似的题,就不再进行阐述了

5.

#include<stdio.h>
unsigned sum(unsigned n){return n?sum(n-1)+n:0;
}int main(){
	printf("%u\n",sum(100));
}

表达式? 结果1:结果2

表达式返回true 返回结果1,否则返回结果2。

在这里是对1-100进行一个累加,即每次判断都会得到ture,所以会一直得到n-1的结果所以得到最后的结果便是对其累加

5050

void strbuf_rtrim(struct strbuf *sb);去除 sb 缓冲区左端的所有 空格,tab, '\t'。
void strbuf_ltrim(struct strbuf *sb);去除 sb 缓冲区右端的所有 空格,tab, '\t'。
void strbuf_remove(struct strbuf *sb, size_t pos, size_t len);删除 sb 缓冲区从 pos 坐标长度为 len 的内容。

{

"version": "2.0.0",

"tasks": [

{

"type": "cppbuild",

"label": "C/C++: gcc 生成活动文件",

"command": "/usr/bin/gcc",

"args": [

"-fdiagnostics-color=always",

"-g",

"${file}",

"-o",

"${fileDirname}/${fileBasenameNoExtension}"

],

"options": {

"cwd": "${fileDirname}"

},

"problemMatcher": [

"$gcc"

],

"group": "build",

"detail": "编译器: /usr/bin/gcc"

}

]

}

void strbuf_rtrim(struct strbuf *sb);去除 sb 缓冲区左端的所有 空格,tab, '\t'。
void strbuf_ltrim(struct strbuf *sb);去除 sb 缓冲区右端的所有 空格,tab, '\t'。
void strbuf_remove(struct strbuf *sb, size_t pos, size_t len);删除 sb 缓冲区从 pos 坐标长度为 len 的内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值