大纲:

  主要介绍了C语言中的指针,内存分配,两种传参方式,typedef的简单用法

关于C语言中的指针:

  指针变量也称为指针(Pointer)

  例如:int* p; 则p为一个指向int类型的指针.

  p保存的值是它所指向的int类型的值的地址.

  如果我们在声明这个指针变量后,给它赋值,如:

int* p;
int a;
p = &a;//&为取址符号
cout << *p << endl;

  则p的值是a的地址,(*p)即为a的值

关于函数参数:

  C语言中有两种向函数传递参数的方式:

    1)值传递(相当于弄了参数的一个副本)

    2)引用传递(相当于使用的是参数本身)

  例:

#include <stdlib.h>
#include <cstdio>
int *p3,*p4;
//这个例子比较复杂,但是比较有用,fun函数传递的两个参数,一个是值传递的指针,一个是引用传递的指针
void fun(int* p1,int* &p2) {
printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
*p1 = 25;
printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
p1 = p3;
printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
*p2 = 100;
printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
p2 = p4;
printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
} int main() {
p3 = (int*)malloc(sizeof(int));
p4 = (int*)malloc(sizeof(int));
*p3 = 10;
*p4 = 20;
int *p1,*p2;
p1 = (int*)malloc(sizeof(int));
p2 = (int*)malloc(sizeof(int));
*p1 = 5,*p2 = 15;
fun(p1,p2);
printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
}

  结果:

5 15 10 20
25 15 10 20
10 15 10 20
10 100 10 20
10 20 10 20
25 20 10 20

  

typedef的几种基础用法:

  1. 为现有类型起个别名

    typedef int dataType;

  2. 给复合类型起个别名

    1) 给数组起别名

      typedef int intList[100];

      那么

        intList a,b;

      相当于

        int a[100],b[100];

    2) 给指针起别名

      typedef int* intPointer;

      那么

        intPointer pa;

      相当于

        int* pa;

  3. 有关结构体的typedef

    typedef struct Node {

      int a,b;

    }strNode,*ptrNode;

    相当于给Node起了个别名,叫strNode,并且给指向Node的指针类型起了名叫ptrNode

    这样写之后,以下两句话就分别等价于:

      1)strNode A;//Node A;

      2)prtNode pA,pB;//Node *pA,*pB;

malloc函数简介:

  malloc的全称是memory allocation,中文叫动态内存分配。

  malloc(unsigned int num_bytes)

  以上的malloc函数向系统申请分配num_bytes个字节的空间,如果分配成功,则返回一个指向被分配内存地址的第一个位置的指针,否则返回NULL。

  由于malloc返回的指针类型为void*,所以在使用这个函数时,我们时常要对分配好的空间进行类型强制转换,转成我们需要的类型。

  例:

int* p;//创建一个指向int类型的指针
p = (int*)malloc(sizeof(int) * 100);//给p分配连续 100*4 byte的内存空间

数据结构实用C语言基础的更多相关文章

  1. 数据结构的C语言基础

    数据结构的C语言基础 1. 数据输出 printf()函数为格式输出函数,它存在于标准函数库中,在C语言程序中可以直接调用,但程序源文件的开头必须包含以下命令: #include < stdi ...

  2. 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加

    一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...

  3. Object Pascal 语言基础

    Delphi 是以Object Pascal 语言为基础的可视化开发工具,所以要学好Delphi,首先要掌握的就是Object Pascal 语言.Object Pascal语言是Pascal之父在1 ...

  4. 【quick-cocos2d-x】Lua 语言基础

    版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...

  5. 01_C语言基础

    内容提要: 1. C语言概述2. 数据类型.运算符与表达式3. C语言程序结构 4. VC6.0使用练习 知识详解01:C语言的历史 1. C语言与其它语言比较 汇编语言: (1).可直接对硬件进行操 ...

  6. Swift语言指南(八)--语言基础之元组

    原文:Swift语言指南(八)--语言基础之元组 元组 元组(Tuples)将多个值组合为一个复合值.元组内的值可以是任何类型,各个元素不需要为相同类型(各个元素之间类型独立,互不干扰--Joe.Hu ...

  7. (cljs/run-at (->JSVM :browser) "语言基础")

    前言  两年多前知道cljs的存在时十分兴奋,但因为工作中根本用不上,国内也没有专门的职位于是搁置了对其的探索.而近一两年来又刮起了函数式编程的风潮,恰逢有幸主理新项目的前端架构,于是引入Ramda. ...

  8. Go语言基础之map

    Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能 ...

  9. 我的学习目标(目前已初步学习完Java语言基础)

    操作系统.尤其是内存/线程/进程方面 计算机网络协议,重点关注 TCP/UDP/HTTP. 数据结构与算法. 数据库 设计模式,熟练掌握常用的几种设计模式. Java语言基础.熟悉java语言基础,了 ...

随机推荐

  1. ES6简述

    啥是ES6 大家都知道,JavaScript由DOM.BOM.ECMAScript组成,ECMAScript是标准. ES6的全称其实是ES2015(6.0)每年更新,依次类推 ES2016(7) . ...

  2. es备份索引

    1.解压https://github.com/medcl/esm-abandonedhttps://github.com/medcl/esm-abandoned/releases tar xf lin ...

  3. edge 浏览器自动识别电话号码解问题解决方法

    解决方案:再head中加上:  <meta name="format-detection" content="telephone=no"> 

  4. UVaLive6443(线段树)

    要点 题意--题意往往是个大坎Orz:输入操作 p 则在区间\([x_1,x_2]\)插入一个三次函数, t 则先查询区间\([x_1,x_2]\)的函数值的和,然后按题目要求得到新的\(x_1\). ...

  5. jq:静态页面常会用到的jq操作(记录)

    1 在php的mvc模式中通常需要做数据异步处理,其中也包含了对htm页面的操作,下面是近期长用到的jq操作,后续会继续补充 2 3 1:修改input框的value值 4 <input typ ...

  6. MiniProfiler NET Core

    MiniProfiler 来分析 ASP.NET Core 应用 它会把结果直接放在页面的左下角,随时可以点击查看:这样的话就可以感知出你的程序运行的怎么样:同时这也意味着,在你开发新功能的同时,可以 ...

  7. untiy3d开发环境搭建和开发准备

    1.到untiy3d官网上下载untiy3d的软件(这里我使用的是个人版的5.3.61f做学习使用) 2.安装vs2012 3.因为unity3d和vs的版本有一定的版本对应关系,我这里使用vs201 ...

  8. Mybatis 使用注解和Provider类实现动态条件查询

    1.注解内拼写 Mybatis SQL 脚本 @Repository public interface CustomerFeedMapper extends BaseCrudMapper<Cus ...

  9. 【转】monkey实战--测试步骤、常用参数、常规monkey命令

    monkey实战--测试步骤.常用参数.常规monkey命令   简要步骤:adb devices---了解包名--adb shell monkey -p 包名 -v 运行次数(多个参数的组合形成不同 ...

  10. 织梦修改“dedecms提示信息”

    1.根目录下include文件夹,找到common.func.php: 2.根目录下dede文件夹(管理目录默认dede),找到sys_data_done.php: 3.打开以上2个.php文件,把“ ...