C程序设计易错笔记

0.printf()、scanf()函数
printf()、scanf()函数需要输入输出某参数时,引用为其为地址(指针)
printf(“%d”,*p)(此处p为指针,p也可为已定义的某一类型变量名,输出结果为p所指向的地址中的内容),若printf(“%d”,&p)输出为p所指的地址。
Scan(“%d”,p)(此处p为指针)
printf(“%d”,p+10)为输出指针p后移10单位指针并输出移位后所指的内容
1.结构体成员变量的引用
主要有三种等价方法:如结构体名为Stu,*p=&stu(指向结构体指针的赋值方式)
Stu.成员名
(*p).成员名
p->成员名

  • 指针运算符(可理解为,读取指向所指存储地址中存放的内容)
    & 取地址运算符
    指针的初始位置和变化位置相当容易错
    分析程序时一定要分清指针的初始位置和变化位置
    2.Status InitList_Sq(Sqlist &L){…}//create a new linear list 此处的&符号为C++中的参数引用运算符,传递的是Sqlist类型数据L的地址。详见《C++ primer 》复合类型中引用部分的内容。
    3.typedef的用法
    ->用一个新的类型名代替原有的类型名 如:typedef int Integer//Integer类型与int作用相同
    ->用简单类型名代替复杂类型 如:typedef struct{int month;int day;int year;}Date;//声明一个新的Date类型代表满足上述内容的结构体类型,可用Date定义一些变量,Date birthday;Date *p;这种方法还可用在声明数组类型、指针类型、结构体类型、共用体类型和枚举类型等。如:typedef int Arr[10]; 然后用Arr去定义数组变量,Arr a,b;//定义数组a[10]和数组b[10]。
    4.对于自增操作运算“++”,当a++与++a等效时,总用++a;自减操作有类似的性质。a++为先使用a的值,再自增1;++a为先自增1,再使用a的值。
    5.指针和数组的应用
    定义时常见的方法:
    (1) int a[n];int *p;p=&a[0];
    (2) int a[n];int *p=a;
    (3) int a[n];int *p;p=a;
    printf("%i\t",a[i]); printf("%i\t",p[i]); printf("%i\t",*p);这三个语句等效(%i为codeblocks输出格式控制符用语)
    指针变量的含义
    定义类型 类型表示 含义
    int i; int 定义整型变量
    int *p;int * 定义p为指向整型数据的指针变量
    int a[5]; int [5] 定义整型数组a,它有5个元素
    int *p[4]; int *[4] 定义指针数组p,它有4个指向整型数据的指针元素组成
    int (p)[4]; int()[4] 定义p为指向包含4个元素的一维数组的指针变量
    int f( ); int () 定义f为返回整型函数值的函数
    int *p( ); int *() 定义p为返回一个指针的函数,该指针指向整型数据
    int (p)(); int ()() 定义p为指向函数的指针,该函数返回一个整型值
    int **p; int ** 定义p为一指针变量,它指向一个指向整型数据的指针变量
    void *p; void * 定义p为一指针变量,基类型为void(空类型),不指向具体对象

6.关于函数调用的参数传递
如:调用void swap1(int *p,int *q)和void swap2(int *p,int *q)
void swap1(int *p,int *q)
{
int temp;
temp = *p;
*p=*q;
*q=temp;
}
void swap2(int *p,int *q)
{
int *temp;
temp = p;
p = q;
q = temp;
}
这里用swap1可以实现q与p所指地址中存放内容的交换,而swap2不能实现,原因是函数调用时实参向形参传递方向是单向的,而形参用后便消失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值