`
ileson
  • 浏览: 215523 次
  • 性别: Icon_minigender_1
  • 来自: 河南省
社区版块
存档分类
最新评论

C/C++

阅读更多
c语言中字符串变量是用一维数组名来表示的。
数组名实际代表数组的首地址,所以字符串变量实际上是一个字符指针,它指向一个以'\0'结尾的字符串首字符。


结构体与指针配合可以形成链表。
形成链表
2、指针作为参数
void   exchange(int   *b,int   *c) 
{int   *a;a=b;b=c;c=a} 
/*上面这个你交换了b和c的地址,这个时候你获得了你想要得结果,可惜当函数返回后,这一切恢复原样,还是没有交换. */

void   exchange(int   *b,int   *c) 
{int   a;a=*b;*b=*c;*c=a} 
/*上面你交换了指针所指向的值,即便返回,这个交换仍然存在. */

/*为什么呢?void   exchange(int   *b,int   *c),传入的是指针,指针入栈,第一个程序交换它们的地址,函数返回后,也就是指针出栈,地址没有交换.什么也没变. */

/*第二个程序,同样传入的是指针,指针入栈,不过你交换的是指针所指向的值,这个值可没有入栈,这样即便函数返回,指针出栈,值还是被交换了. */


3、形参、实参
int f(int b){/*b为形参*/
 return b;
}
main(){
 int a=1;
 printf("%d",f(a));/*a为实参*/
}


形参:全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传的参数.
实参:全称为"实际参数"是在调用时传递个该函数的参数.

形参和实参的类型必须要一致,或者要符合隐含转换规则, 当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放, 而实参内容不会改变.

而如果函数的参数是指针类型变量,在调用该函数的过程中,传个函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身.所以在函数体内部可以改变实参的值.

4、函数参数传递方式(传值、传地址、传引用)
引用
传值
是把实参的值赋值给形参那么对形参的修改,不会影响实参的值

传地址
是传值的一种特殊方式,只是他传递的是地址,不是普通的如int那么传地址以后,实参和形参都指向同一个对象

传引用
真正的以地址的方式传递参数传递以后,形参和实参都是同一个对象,只是他们名字不同而已对形参的修改将影响实参的值

#include <stdio.h>

/**
 * 传值
 */
void change1(int x){
        x=1;   /*将值改成1*/
}
/**
 * 传地址
 */
void change2(int *x){
        *x=1;   /*将指针指向的值变成1*/
}
int main(void){
    int a=0;
    change1(a);
    printf("%d \n",a);
    change2(&a);
    printf("%d \n",a);
    getch();
    return 0;
}

5、typedef /*类型定义 type define*/
定义一种类型
#include <iostream.h>

typedef int INTE; /*第一种用法*/
typedef struct _TT /*第二种用法*/
{ 
	int a; 
	double b;
}TT; 
void main() 
{
	int i;
	INTE j=9;/*等同与 int j;*/
	i=j;/*不会警告,因为类型同*/
	struct _TT st;/*与 TT st的作用一样*/
	st.a=1;
	st.b=1.0;
	cout<<i<<j<<st.a<<st.b;
} 

6、枚举与结构体
引用
enum和struct的唯一区别是:前者是常量的聚集,后者是变量的聚集;
enum   COLOR{
RED,
GREEN,
BLUE
};
struct   COLOR{
DWORD   r;
DWORD   g;
DWORD   b;
};


7、函数与函数指针
  声明:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 变量f */
f=func; /* 将func函数的首地址赋给指针变量f */

  例子:
int func(int a,int b){
    return a+b;
}
int main(void){
    int a=3,b=4,c,d;
    int (*f)(int,int);  /*声明函数指针变量f*/
    f=func;             /*将函数首地址赋给函数指针变量f*/
    c=func(a,b);        /*常规的函数调用的写法*/
    d=(*f)(a,b);        /*用指针调用函数*/
    printf("%d \n%d \n",c,d);
    return 0;
}

如果函数指针遇到 typedef 呢?
请往下看
#include <stdio.h>
#include <stdlib.h>
int func(){return 0;}
int main(){
    typedef int (*K)(); /*定义函数指针类型K(相当于C++、java中定义了一个类)*/
    K k;                /*声明函数指针类型变量k*/
    k= func;            /*将func 函数入口地址赋给 函数指针变量 k*/
    int i=k();
    printf("%d \n",i);
    return 0;
}

8、内存泄露和野指针
引用
内存泄露:指针销毁了,并不表示所指的空间也得到了释放;
野指针:内存被释放了,并不表示指针也被销毁了或指向NULL;

9、NULL与""的区别

10、宏定义(#define)
#include <stdio.h>

#define D1 3.14
#define D2 (x+y)
#define D3(x,y) (x>y?x:y)

int main(void){
    int x=6,y=2;
    double d1=D1;
    int d2=D2;
    int d3=D3(x,y);
    printf("d1=%f,d2=%d,d3=%d\n",d1,d2,d3);
    return 0;
}


分享到:
评论

相关推荐

    c/c++中文帮助文档(API)

    C++是C语言的扩展,引入了面向对象编程的概念。在编程过程中,理解并有效地使用库函数是至关重要的,因为它们提供了标准功能,可以帮助开发者节省时间,减少错误,并提高代码的可读性和可维护性。 API,全称为...

    IAR C/C++ Development Guide

    《IAR C/C++开发指南》是一本针对使用IAR集成开发环境(IDE)进行嵌入式系统开发的开发者编写的详细指导书籍。该指南详细介绍了如何使用IAR IDE进行编译和链接,以及如何对开发环境进行优化和配置。这本书适合使用C/...

    vs code C/C++语法高亮配置文件(C/C++ Themes插件)

    vscode配色插件的c/c++语法高亮配置文件,主题插件为C/C++ Themes。 可以对诸如const、enum、typedef别名、结构体引用等语法高亮进行设置,语言本身的关键字自然不用说了,比one dark pro等热门的插件颜色丰富的多。...

    Dev-cpp5.4.0及API帮助文档 2018年蓝桥杯C语言/c++

    这个版本在2018年的蓝桥杯编程竞赛中被广泛使用,帮助参赛者进行C语言和C++程序的编写。 【C++API.chm】:这是一个关于C++标准库的API帮助文档,以CHM(Compiled HTML Help)格式呈现。CHM是微软的HTML帮助文件格式...

    C/C++程序设计学习与实验系统

    官方介绍:原名《Turbo C/C++ for Windows 集成实验与学习环境》,支持最新操作系统WINDOWS 7,它是从事一线教学的大学教师根据C/C++ 初学者的特点,量身定制的一个简单易用的 C/C++程序设计学习与实验软件(支持TC2/...

    C/C++ API 帮助文档大全(中文,chm格式)

    6. **C库的C++封装**:C++对C库中的函数进行了封装,如头文件和分别对应C语言的和,使得C++代码能以更现代的方式来使用这些函数。 7. **C++11及后续版本的新特性**:从C++11开始,C++引入了一系列新特性,如lambda...

    C/C++中文文档(支持C++20和C18)和蓝桥杯C/C++组用的文档

    这个文档压缩包包含普通C/C++中文文档和蓝桥杯比赛时用的文档,C/C++中文文档是最新版,支持到C++20和C18,且包含以前版本的内容。蓝桥杯蓝桥杯C/C++组用的文档比正常文档更简略,但包含了ASCII码表。

    C/C++实现mysql数据库的缓存管理

    C/C++实现mysql数据库的缓存管理 Linux下用C/C++写一个提高mysql数据库效率的数据缓存模块 缓存管理 window下用C/C++写一个提高mysql数据库效率的数据缓存模块 C/C++ mysql缓存 缓存 PS:记得要先把数据库给搭建起来

    c/c++帮助文档中文

    C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域。这份"c/c++帮助文档中文"提供了丰富的中文资源,帮助开发者深入理解和掌握这两种语言。 C语言是最早由Dennis Ritchie在贝尔实验...

    C/C++详细函数大全

    《C/C++详细函数大全》是一部综合性的编程资源,涵盖了C和C++语言中的各种函数,旨在为学习者提供详尽的函数介绍、说明及代码示例。此资源源自某培训学校的教学材料,以CHM(Compiled HTML Help)格式呈现,这种格式...

    C/C++程序设计学习与实验系统 V2008.13.part1

    同时,为了便于C语言学习,加入C语言流程控制语句演示动画、C语言学习指导、可以方便地进行网络上和本机上的C/C++程序进行对照输入练习、入门程序实例、典型源程序、典型的函数算法,课程设计指导、课程设计源程序、...

    c / c++ / cpp / stl 中文帮助文档手册chm格式下载

    c / c++ / cpp / stl 中文帮助文档手册chm格式下载 C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String...

    二维码(QRcode)生成算法 C语言/C++源码

    #二维码(QRcode)生成算法 C语言/C++ 源码 1. 根据输入字符串识别编码模式; 2. 根据输入字符串长度选择合适的QRcode版本; 3. 将编码转换为二进制位流表示为数据码字; 4. 使用多项式生成纠错码; 5. 将数据码和...

    Microsoft(R) C/C++, Version 7.0

    《Microsoft(R) C/C++, Version 7.0:探索编程语言的里程碑》 在计算机科学领域,编程语言的发展历程犹如一部丰富多彩的历史长卷,而Microsoft(R) C/C++, Version 7.0无疑是其中浓墨重彩的一笔。这款在1990年代初期...

    linux c/c++基础学习资料(百度云链接和提取码)

    C++是C语言的扩展,支持面向对象编程,而C语言是许多系统级编程的基础。理解变量、数据类型、运算符、控制结构(如if-else、for、while)、函数、指针、数组、结构体等概念是C/C++学习的基石。对于C++,还需掌握类、...

    编程及C/C++初学者 FAQ

    ### 编程及C/C++初学者 FAQ #### 一、引言 本文档旨在帮助初学者快速上手C/C++编程语言,并解答在学习过程中可能遇到的各种常见问题。通过集中整理与解答这些问题,帮助读者更好地理解编程的基本概念,顺利运行...

    C/C++程序四书五经

    - **内容亮点**:本书全面覆盖了C99、C89、传统C语言、各版本C运行库以及编写与C++兼容的C代码等知识体系,无论是初学者还是专业人士,都能从中找到所需的信息。 - **适宜读者**:适合所有阶段的C语言学习者,尤其...

    C /C++库函数及文件大全 经典 chm

    Character Standard C Math Standard C Time & Date Standard C Memory Other standard C functions All C Functions C++ C++ I/O C++ Strings C++ String Streams ...

    密码学:C/C++语言实现(第2版)

    密码学:C/C++语言实现(原书第2版)主要阐述如何使用C和C++语言实现密码学算法,包括编写专家级的密码所需要掌握的知识和技术,以及如何安全并高效地实现密码学算法。第2版包括了许多全新内容,同时对原有内容进行了...

Global site tag (gtag.js) - Google Analytics