Linux下的C语言学习笔记(2)

news/2024/7/20 13:48:54 标签: 内存管理, 内核, 指针, 全局变量

------------------------------day--7--内存管理---------------------------------------

系统内核:留给系统的正常运行必不可少的
栈:编写的程序运行时存放变量的
堆:
数据段:存放全局变量,常量的
代码段:存放编译好的代码
2,函数指针
int quadrate(int a);
// main中
int a=3;
int (*pquadrate)(int a);
pquadrate = &quadrate;
//必须加上“()”才会是指向一个函数的指针!!!
int s = (*pquadrate) (a);
//最后就相当

//int s = quardrate(a);

------------------------------day--8--数组声明和内存排序---------------------------------------

1,x/nd:0x7fffffffde1c
x:为要打印输出的内存地址
n:要打印输出几个内存的值
d:按十进制显示
2,指针常量和指针变量:
int arr[10];
int p=arr;
其中arr为指针常量
*p为指针变量

------------------------------day--9--预处理宏函数和typedef---------------------------------------

.c文件-->.i文件-->.s文件-->.o文件-->可执行文件
       预处理   编译     汇编      链接   
1,预处理:
//生成预处理文件
gcc -o hello.i hello.c -E
2,宏定义:
#define R 10
//编译的时候把R替换为10
3,宏函数:
代码实例:
#include<stdio.h>
#define R 20
#define M int main(
#define N(n) n*10
#define ADD(a,b) a+b
//define ADD(a,b) (a+b)
int add (int a,int b){
    return a+b;
}
typedef int tni;
//把int * 替换为p
typedef int *p;
//相当于 int *q = NULL;
p q = NULL;
 M){
    int a=R;
    printf("a=%d\n",a);
    printf("helloworld\n");
    
    int b= N(a);//int b= a*10;
    printf("b=%d\n",b);
    int c=add(a,b);
    printf("c=%d\n",c);
    int d=ADD(a,b);
    printf("d=%d",d);

    //int e = a+b*a+b;
    int e = ADD(a,b)*ADD(a,b);
    printf("e=%d",d);
    return 0;
}
输出结果:
a=20
helloworld
b=220
c=220
e=4220
宏不考虑C语言语法,只做替换功能
另外一个实例:
#include<stdio.h>

#define M int main(
#define add(a,b) (a+b)
M){                //如果去掉M编译会出错,原因???
    int a = 123;                          ------
    int b = 1;                              |
    int c = add(a,b);                       |
    printf("a = :%d\n",a);                  |
    printf("c = %d\n",c);                   |
    return 0;                              |
}                                           
#define N int main(    //这里必须换行分开,否则编译会报错,此处"N"相当于"int main("
#define  add(a,b) (a+b)//在此处的宏定义函数,就相当于在"int amin()"之前定义的一样
N){                                //此处的"N"被替换成“int main(”连起来就和"int main()"一样
    int a = 123456789;
    printf("a = :%d\n",a);
    return 0;
****能够正确执行*****

/*
 *******错误的例子*****
define M (M*10)
int main()
{
    int aa = M;
    printf("aa = %d\n",aa);

    return 0;
}
*/
*******编译错误********
3,typedef:
------------------------------day--10--结构体数组和结构体指针---------------------------------------
结构体总大小 
*****************************************
结构体长度的计算:
如结构体:
struct data{
int a;
char b;
char c;
};
int a的长度为4,偏移量为0,0是4的整数倍,不用填充;
char b的长度为1,偏移量为4,4是1的整数倍,不用填充;
char c的长度为1,偏移量为5,5是1的整数倍,不用填充;
整个结构体目前占用的总空间为6,结构体中最长的元素为
int a(4个字节),而6不是4的整数倍,所以需要填充2个
字节,最后结构体的长度为8个字节。
*****************************************
#include<stdio.h>
struct weapon{
    char name[20];
    int atk;
    int price;
}; 
int main(){
    int a = 0;
    float b=0.0;

    //定义weapon_1结构体变量,并初始化列表
    struct weapon weapon_1 = {"weapon_name,100,200"};
    printf("%s\n",weapon_1.name);

    //结构体数组
    struct weapon weapon_2[2] = {"weapon_name1",50,100,"weapon_name2",100,200};
    printf("%s\n,%d\n",weapon_2[0].name,weapon_2[1].name);
    
    //结构体指针
    struct weapon * w;
    w=&weapon_1;
    //注意此处,(*w)的"()"不能省略,(*w).name相当于w->name
    printf("%s\n,%d\n",(*w).name);
    return 0;
}
------------------------------day--11--共用体---------------------------------------
#include<stdio.h>
//共用体所有成员共享同一块地址
union data{
    int a;
    char b;
    int c;
}

int main()
{
    union data data_1;
    data_1.b='C';
    data_1.a=10;//此处的data_1.a=10;会将data_1.b覆盖掉
    printf("%p",&a);//%p表示打印一个指针
    return 0;
}






http://www.niftyadmin.cn/n/927122.html

相关文章

python能用分支结构写出循环的算法吗_python二级考试-试题8.doc

python二级考试-试题8.doc -1.数据库设计中反映用户对数据要求的模式是___________。A概念模式B内模式C设计模式D外模式正确答案2.一个工作人员可使用多台计算机&#xff0c;而一台计算机被多个人使用&#xff0c;则实体工作人员与实体计算机之间的联系是___________。A多对一B…

Linux下的C语言学习笔记(3)

------------------------------day12---动态数据结构-静态链表-动态链表--------------------------------------- 1&#xff0c;静态链表&#xff1a;#include<stdio.h>struct weapon{int price;int atk;struct weapon * next;};int main(){struct weapon a,b,c,*head;…

嵌入式C语言知识整理(1)

1--下面给出不同位数编译器下的基本数据类型所占的字节数&#xff1a; ******************************************************************* 16位编译器 char &#xff1a;1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int&#xff1a; 2个字节 unsigned int …

python 网格交易源码_网格交易法策略源码

网格交易法的源码 //------------------------------------------------------------------ //| Grid1.1.mq4 | //| Copy* 顺势加码 2006 | //| WWW.CXH99.COM //------------------------------------------------------------------ #property copy* "Copy* 顺势加码 20…

数据结构与算法的Java描述--1

1&#xff0c;递归调用的使用 /*递归调用四条基本法则&#xff1a; * 1&#xff0c;基准情形&#xff1a;必须有某些基准情形&#xff0c;他们不用递归就能求解* 2&#xff0c;不断推进&#xff1a;对于那些需要递归求解的情形&#xff0c;递归调用总能够朝着基准的情形的方向…

不是具体的python序列类型的是_python的序列类型不包括

Python中除了字符串以外,还有哪些常用的序列类型呢&#xff1f; 题主欢迎来到CSS布局HTML, 序列类型除了题主提到的 字符串 外,常用的还有: 列表; //list 元组; //tuple range()对象; 参考: *.题主有时间可以看一下Python官网Built-in Type相关内容,里面写的更详细一些 希望可以…

几个算法的描述和时间复杂度的解释

/* * (1)-最大子序列求和问题 * 4种算法的比较 * (2)-若干个算法的比较 * */ package Demo1; public class MyAlgorithm { /* 算法 1 O(N^3) */ public static int maxSubSuml(int[] a){ int maxSum 0; for(int i0;i<a.length;i){ for(int ji;j<a.length;j){ i…

网站整体流程_高端网站建设为什么要选择专业建站公司?

高端网站建设为什么要选择专业建站公司&#xff1f;近期有很多企业管理层人员一直在询问一个问题&#xff0c;这个问题便是为什么企业建网站为什么要找技术专业的网站建设公司呢&#xff1f;之所以这些人会问这个问题&#xff0c;還是这些人较为关心这一网站建设十分&#xff0…