linux kernel 编程基础

这篇博客主要探讨了C语言的基础知识,包括数据类型、运算符、内存管理、字符串操作以及指针的使用。此外,还涉及了Linux内核编程的基础概念,如位操作、互斥锁和自旋锁的差异,以及中断处理中的注意事项。通过实例和问题,深入浅出地介绍了编程中的常见问题和解决策略。
摘要由CSDN通过智能技术生成

一、C语言系列(计算型):

1、数据类型 int占4byte  char占1byte  (32bit的系统),求下面sizeof的大小:

(1)sizeof练习
    char str[] = "Hello";              sizeof(str) = 6;
	char *p = str;                    sizeof(p) = 1;
	void *pbuf = malloc(100);		sizeof(pbuf) = 4;
	void func(char string[100])		
	{
		int a = sizeof(string);        sizeof(a) = 4;
	}

	char *src = "world"; 
    int len = strlen(src);            len = 5;
(2)结构体对齐
typedef struct{
		char a;
		int b;
		char c;
	}test_struct;

	test_struct  g_test_array[5];
	
	请问:  sizeof(test_struct) = 12;
		sizeof(g_test_array) = 60;

2、请计算如下结果:

(1)int  i=1, j = 2;

          int k = i +++j

          k = 3  //先执行i + j = 3, 然后执行i ++

(2) j = 3 * 3 = 9

    product(i ++) = i ++   *   i ++  = 3 * 4 //此时i = 5

    product(++ i ) = ++i  *   ++i =  6  *  7 = 42

#define  product (x)  (x*x)
int main()
{
    int i = 3,j,k;
    j = product(i ++);  //3 * 4
    k = product(++j);   //6 * 7
    printf("j = %d,k = %d\n",j,k); //12 42
}

(3)uint 型数据和int 型数据运行后,自动转换为uint类型数据,-14转为uint很大:c > 1

char foo(void){
    unsigned int a = 6;
    int b = -20;
    char c = ;
    (a + b > 6)?(c = 1):(c = 0)
}

(4)a = b + 2 * b + 2 = 11

#define SQR(x)  (x*x)
void main(){
    int a,b = 3;
    a = SQR(b + 2);
  printf("a = %d\n",a)
}

# define  SQR(x)   ((x) * (x))      结果为25

(5)int  **a[3][4]这个数组占据多大空间?

  sizeof问题:3*4*4 = 48

(6)char var[10]

  int  test(char  var[]){

  return sizeof(var); //var[]等价于*var ,结果为4

  }

(7)计算结果:

#include<stdio.h>
int main(){
    printf("%f",5);   //0.000000
    printf("%d",5.01);//是一个大数
}

3、程序实现:已知从1-100 范围内挑选99个整数,没有顺序的
    存储在全局数组a中,请编程找出缺少的那个整数。
思路:
    sum1=1+2+3+4+……+100
    sum2=数组元素之和
    sum1-sum2就是没有的那个。

#include <stdio.h>

int sum1_t(void){
	int i = 0;
	int sum1 = 0;
	for(i = 1;i <= 100;i ++){
		sum1 = sum1 + i;
	}
	return sum1;
}

void main(void){
	int sum1 = sum1_t();
	int sum2 = 0;
	int a[99]; //存放无序的
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值