A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 仰望星空的猪 中级黑马   /  2015-11-20 13:54  /  593 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一 指针
1  内存地址的概念
内存地址:内存中存储单元的编号.
变量地址:系统分配给内存单元的起始地址。
2 指针的概念
        指向内存单元的地址。
3  指针的好处
1) 让函数有多个返回值。
2) 为函数提供修改和调用变量的灵活手段。
3) 可以改变某些子程序的效率。
4) 为动态数据结构(二叉树,链表)提供支持
4  变量的存取方式
a直接存取:通过变量名称赋值和取值
b间接存取:通过指针对变量赋值和取值。
5  指针变量概念
      存储指针的变量
       变量的值是一个地址。
6  指针变量定义和初始化
      类型说明符 * 变量名;
       charch=‘a’;
       char*p = &ch;
注意
       a 类型说明符是指针变量指向的变量的数据类型。
         b *说明定义的变量是一个指针变量。
       c指针变量有全局 和局部之分
d 不初始化的指针变量存储的值为随机数,这种指针称为野指针。
f 不知道指向的指针变量最好赋值为 null。
g 定义什么类型的指针就应该指向什么类型的变量
7 指针变量的引用
             *p 取p地址存储的值。
8 指针应用场景
1) 在被调函数中修改主调函数的变量值。
2) 在函数中实现返回多个返回值,在传参数的时候将将要返回值的地址传入被调函数中。修改地址对应的值就可以实现多个返回值。
9 二级指针
           指向指针的指针
10 数组指针
     指向数组的指针
1)指针与一维数组
           int a[3]={1,2,3};
           int *p =a;
           a为数组名 存储的是数组的首地址。
           p+1:指向数组中下一个数据的地址
           *p++  指针偏移  先取p值 再加 *p++ 的值为*p的值
2)指针与二维数 组
int a[2][3]={1,2,3,4};
a 是数组首地址 也是第0行的首地址,也是第0行第0列的地址
       a[0]+i 是第0行第i列的地址。
a+i表示第i行首地址
*(a+i)为第i行的首地址。
**(a+i) 为第i行第0列的值。
*(*(a+i)+j)为第i行j列的值。
11 一维指针数组
    存储指针的数组。
               
          int a=b=b=3;
          int *p[3]={&a,&b,&c};
    p为数组的首地址,也是第一个元素的存储地址。
    使用数组名访问a的值
    *p 为第一个元素的值也为a的地址
**p 为a的值。
12  二维数组指针
C 语言中可以通过定义行数组指针的方法,使得指针变量与二维数组名有相同的性质。
      数据类型 (*指针变量名)[二维数组的列数];
      int a[2][2]={1,2,3,4};
      int (*p)[2]=a; 定义一个数组指针,指向含2个元素的一维数组。
二维数组中 a=&a[0]=&a[0][0]=a[0]
*(*(p+i)+j)获取二维数组的每个值。
指针数组和二维数组指针的区别
指针数组  int*p[2]     ;多个指针
二维数组指针 int (*p)[2]; 一个指针变量
13  字符串指针
      字符串定义  charstr[10]=“abcdef”;
      字符串指针定义 char *str;
str = “dasda“;取字符串的首地址赋值给str
      str都为字符串的首地址。
14 char型指针数组
char 类型指针数组
1)定义
char *name[3]={
             “xiaoming”,  //值都是字符串的首地址
             “xiaohong”,
“xiaohuang”
}
          2)使用
                    指针法printf(”%s\n”,*(name+ i));
   下标法 printf(”%s\n”,name); name为指针数组的第i个元素的值,也为字符串的首地址。
3)字符串指针和字符数组的区别
             字符串指针:char  *str=“abc “;
                       abc保存在常量区 str为指针变量可以重新赋值(指向)
字符数组 :char  str[]=“abc “;
             abc保存在栈区 str为常量值为abc的首地址不能重新赋值。
15 fgets函数的使用
   暂时使用fgets接收从键盘接收一个字符串,保存到数组中。
      scanf不可以接收空格。
       gets可以接收空格,越界访问警告
       fgets 安全的字符串接收函数。保留一个位置存\0.
使用格式
  fgets(字符数组名,长度 ,stdin);
int ch[10];
fgets(ch,sizeof(ch),stdin);     
16  fputs函数的使用
fputs(地址,stdout); //不会自动换行 puts可以自动换行。都不能格式化输出
      17 const关键字
      const是类型修饰符。
      修饰的变量值不能改变。静态常量。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马