数据结构实用C语言基础
大纲:
主要介绍了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语言基础的更多相关文章
- 数据结构的C语言基础
数据结构的C语言基础 1. 数据输出 printf()函数为格式输出函数,它存在于标准函数库中,在C语言程序中可以直接调用,但程序源文件的开头必须包含以下命令: #include < stdi ...
- 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加
一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...
- Object Pascal 语言基础
Delphi 是以Object Pascal 语言为基础的可视化开发工具,所以要学好Delphi,首先要掌握的就是Object Pascal 语言.Object Pascal语言是Pascal之父在1 ...
- 【quick-cocos2d-x】Lua 语言基础
版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...
- 01_C语言基础
内容提要: 1. C语言概述2. 数据类型.运算符与表达式3. C语言程序结构 4. VC6.0使用练习 知识详解01:C语言的历史 1. C语言与其它语言比较 汇编语言: (1).可直接对硬件进行操 ...
- Swift语言指南(八)--语言基础之元组
原文:Swift语言指南(八)--语言基础之元组 元组 元组(Tuples)将多个值组合为一个复合值.元组内的值可以是任何类型,各个元素不需要为相同类型(各个元素之间类型独立,互不干扰--Joe.Hu ...
- (cljs/run-at (->JSVM :browser) "语言基础")
前言 两年多前知道cljs的存在时十分兴奋,但因为工作中根本用不上,国内也没有专门的职位于是搁置了对其的探索.而近一两年来又刮起了函数式编程的风潮,恰逢有幸主理新项目的前端架构,于是引入Ramda. ...
- Go语言基础之map
Go语言基础之map Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现. map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能 ...
- 我的学习目标(目前已初步学习完Java语言基础)
操作系统.尤其是内存/线程/进程方面 计算机网络协议,重点关注 TCP/UDP/HTTP. 数据结构与算法. 数据库 设计模式,熟练掌握常用的几种设计模式. Java语言基础.熟悉java语言基础,了 ...
随机推荐
- JDK动态代理 Proxy InvocationHandler
- 字符串前面u,r,b
u :代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u:py3当对字符串进行操作的时候,默认使用Unicode编码 r/R:非转义的原始字符 ...
- 出现提示ERROR 1289 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have IT working
关闭mysql数据库 在mysql的安装目录中找到my.ini文件找到skip-innodb,在前面加上#号保存,重启mysql服务 OK.
- 判断jquery对象是否在执行动画
function isAnimated($obj){ var flag=false; if($obj.is(":animated")){ flag=true; } return f ...
- 2.排序检索数据 ---SQL
order by 一.排序数据 SELECT prod_name FROM Products ORDER BY prod_name; ORDER BY子句的位置 在指定一条ORDER BY子句时,应该 ...
- Django模板语言,过滤器整理
Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...
- SocLib的安装
一.soclib的安装 1.安装g++,一般Ubuntu系统都自带了,所以无需安装.后面这两个软件需要提前安装,不然后面执行相关操作是会报错:sudo apt-get install automake ...
- CountDownLatch MyUncaughtExceptionHandler
package com.yd.wmsc.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util ...
- 关系型数据库---MySQL---数据库设计三大范式
1.第一范式: 1.1.1 数据表的每个数据列具有原子性: 1.1.2 同一个数据表中内容相似的数据列必须消除: 2.第二范式: 第一范式的基础上,每个数据表只描述一件事: 3.第三范式: 第二范式的 ...
- Vue双向绑定简单实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...