大纲:
主要介绍了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的内存空间