C语言复习
2016-04-16 21:17
447 查看
1.指针与数组
数组是同类型的变量的集合,各元素按下标的特定顺序占据一段连续的内存,各元素的地址也连续,指针对数组元素非常方便。通过指针引用数组元素可以分以下三个步骤:
(1):说明指针和数组
(2):指针指向数组
(3):通过指针引用数组元素
引用数组元素可以有三种方法:
下标法: a[ i ]
指针法: *(p+i)
数组名法:*(a+i)
2.内存动态分配
malloc(m):开辟m字节长度的地址空间,并返回这段空间的首地址头文件stdlib.h malloc.h
使用方法:
int *p; p = (int*)malloc(sizeof(int) * 128);
以上代码就为p分配了128个int型的数据
sizeof(x):计算变量x的长度
贴一道面试题:
32位环境下,int *p=new int[10];请问sizeof(p)的值为()
A、4 B、10 C、40 D、8
#include<iostream> using namespace std; void fun(int *P) { cout<<"在函数中"<<sizeof(P)<<endl; } int main() { int A[10]; int* B=new int[10]; cout<<"数组名"<<sizeof(A)<<endl; cout<<"指针"<<sizeof(B)<<endl; fun(A); }
结果输出:
数组名40
指针4
在函数中4
由此可见,数组名并不是完全等同于指针。虽然它们都可以通过指针方式访问数组。在这个博客看到他们的区别:http://blog.csdn.net/ljob2006/article/details/4872167
但是数组在作为函数参数传递过程中,会退化成指针。这也是为什么指针作为参数传递时,经常要一个长度。
free(p):释放指针p所指变量的存储空间,即彻底删除一个变量
free(p); p = NULL;的必要性
C++中动态分配:
变量:
语法:指针变量 = new 类型名;
Delete 指针变量
举例:
int *p; p=new int; delete p;
初始化:
*p=90; p=new int(99);
一维数组:
语法:指针变量 = new 类型名[下标表达式]; 下标表达式是整型常量或整型表达式
Delete [ ]指针变量;—[ ]表明是个数组,但不需要指出其大小
举例:
Int *p; P= new type[s]; Delete [ ]p;
3.值传递与参数传递
4.结构体定义方法
truct Book { char no[15]; char name[50]; float price; }; Book b[10]; //正确 struct { char no[15]; char name[50]; float price; } Book; Book b[10]; //错误 typedef struct { char no[15]; char name[50]; float price; }Book; Book b[10]; //正确
5.结构体指针
typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; // *LinkList为Lnode类型的指针 //LNode *p--LinkList
6.链表初始化
#define Status int Status InitList_L(LinkList &L){ L=new LNode; //生成头节点 L->next=NULL; //置空 return OK; } //对于链表,常用的三条语句如下: p=L->next; //p指向首元结点 while(p!=NULL) //p未到表尾 p=p->next; //p指向下一个结点 //另外,指针保留技术:q=p;p=p->next;
7.文件读写
#include <fstream> ifstream inFile("book.txt");//读文件 inFile>>BK_head1>>BK_head2>>BK_head3; while(!inFile.eof()) //逐行依次读取所有图书数据 inFile>>L.BK[i].no >>L.BK[i].name>>L.BK[i].price; inFile.close(); ofstream outFile("book_new.txt"); //写文件 for( i=0;i<L.length;i++) outFile<<setw(15)<<L.BK[i].no<<"\t"<<setw(50)<<L.BK[i].name<<"\t"<< setw(5)<<L.BK[i].price<<endl;
8.在不同的函数中试图改变一个数据,可以通过:
函数return指针或引用
全局变量
相关文章推荐
- c++作业-3
- C++文件的存取
- C++ 类型转换操作符(Type Conversion Operators)
- C语言扫雷基础
- (伪)随机数发生器 (C语言)
- C++封装篇 (下)
- 一图总结C++中关于指针的那些事
- c++复习要点总结z之十二——STL string
- C++ 中Traits技术 (3) —— 关于特化和偏特化
- C语言
- C++之类的六个默认成员函数
- C++基础和STL,Effective C++笔记
- 大数c++模板 超级好用
- c++ 一个构造函数 调用 另一个 构造函数
- c++大数模板
- c语言:定长顺序串的基本操作实实现
- c++作业
- 脉络最清晰的C++高斯消元程序
- C++ 虚函数表
- BoW词袋模型Bag of Words cpp实现(stable version 0.01)