【20160726】指针(1)

本文深入探讨了C语言中的指针概念,包括指针变量的定义与使用、野指针的理解、指针间的运算等内容,并通过实例展示了如何利用指针进行数组的操作,如逆序与排序等。
知识回顾:
1.数组的三个特点:有序、占一段连续的内存空间、数组中的元素类型相同。
2.一维数组数组名相当于单指针,二维数组数组名相当于行指针。
3.下标从0开始,下标代表偏移量。
4.sizeof:计算变量所占内存空间大小的运算符。

指针(1):

1.区分指针和指针变量
    指针——地址(通常我们所说的是指针变量)
    指针变量-——存放地址的变量
2.声明一个指针变量
   基类型    *指针变量名
   基类型:指针所指变量的数据类型
   *  :声明时,仅标识该变量为指针型变量,无实际意义
3.野指针
    int *p;    p为野指针,野指针并不是NULL指针,是指向垃圾内存的指针。
4.指针偏移
    int a[10];
    printf("%d %d", &a, &a + 1);    ------>输出相差40
5.地址的类型是无符号整型。
6.C语言中的三种内存错误:
    (1).指针未指向合法内存;
    (2).scanf语句中未加&;
    (3).数组越界;
7.不同类型中的比较“0”:
    (1).浮点:10-5  10-6  == 0;
    (2).指针:NULL == 0;
    (3).字符:‘\0’ == 0;
    (4).bool: Ture  False;
8.指针变量赋值:
        int a = 6;
    (1) int *p = NULL;
         p = &a;
    (2) int *p = &a;
9.swap函数(3种,两错一对)
    (1)swap(int *a, int *b)(错)                         (2)swap(int a, int b)(错)                (3)swap(int *a, int *b)(正确)
        {                                                              {                                                   {
            int *t;                                                        int t = a;                                                int t;
            t = a;                                                        a = b;                                                    t = *a;
            a = b;                                                       b = t;                                                     *a = *b;
            b = t;                                                   }                                                                 *b = t;
        }                                                                                                                   }
10.指针间运算
    int *p = (int *)0x2000;
    int *q = (int *)0x2014;
    printf("%d", q - p);            ----------------> 5    得出的是单元数
11.输出数组的五种方法:
    (1 and 2).  for(i = 0; i < alength; i ++)
                        printf("%d", *(a + i));           <---------------->       printf("%d", a[i]);
    (3 and 4).  for(p = a, i = 0; i < alength; i ++)
                        printf("%d", *(p + 1));          <---------------->        printf("%d", p[i]);
    (5)            for(p = 0; p < a + alength; p ++)
                        printf("%d", *p);
12.用指针进行数组逆序、排序。
13.const 只读
    (1) int *const p1 = &a;    p1 的值不能修改
    (2) int const *p2 = &a;   const int *p3 =  &a;     p2, p3 所指地址中的值不可改变,只能指向const型变量
    (3) const int * const p4 = &a;    p4的值不能改变,所指的地址中的值也不可改变 ,只能指向const型变量
14.大端,小端
    大端  linux 高位存低地址,低位存高地址。
    小端  windows  高位存高地址,低位存低地址。
15.malloc()    开辟一段固定的指定大小的内存空间
    流程: malloc()——> free()——> p = NULL;
16.realloc()    动态开辟内存空间
    将第一个参数所指向的内存空间扩大到第二个参数所指定的大小。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值