您的位置:首页 > 编程语言 > C语言/C++

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

指针或引用

全局变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: