学习笔记5-C语言指针

原创 2015年11月18日 23:44:03

一 指针

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  字符串指针

       字符串定义  char str[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[i]);  name[i]为指针数组的第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是类型修饰符。

       修饰的变量值不能改变。静态常量。

 

相关文章推荐

C语言指针学习笔记

  • 2013年08月09日 17:08
  • 24KB
  • 下载

C语言学习笔记变量数组指针

  • 2010年08月25日 23:31
  • 116KB
  • 下载

iOS开发学习笔记 2-4 C语言部分 指针

计算机有一系列连续编号或者编址的存储单元(通常所说的内存),这些存储单元可以单个进行操作,也可以以连续成组的方式进行操纵。指针是能够存放一个地址的一组存储单元,指针指的就是内存地址,通常是4个(32位...
  • lboboby
  • lboboby
  • 2014年04月25日 10:56
  • 802

OC学习笔记之C语言字符串处理(非指针版)

字符串的输入输出    输出:       例:              -         结果:                结论:%s-----------从给定的地址开始,一...

【黑马程序员】C语言学习笔记(2) - 指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------     指针是C语言提供的一种数据结构,其功能与一般的数据类型不一样的地方就在于它存储的是变量的...

C语言学习笔记之指针篇(二)

1.指针类型分析 分析指针,可以从变量名开始,根据运算符优先级结合,一步一步分析. int p; //这是一个普通的整型变量 int *p; //首先从P处开始,先与*结合,所以说明P是一个指针...

c语言学习笔记之指针

指针 内存中最小的存储单元:字节,每个字节在内存中都有一个编号,这编号就是指针 指针:内存地址 有了指针你就有了打开这块内存的钥匙,就可以操作这一块的内容了 指针变量:存放内存地址的变量 定义指针:指...

C语言学习笔记——指针

1.指针必须先初始化    int *p;      *p = 3;//不合法 2.指针变量可以改变自身的值,如p++是合法的;而数组名是常量,int a[],a++是非法的 3.假设二维数组a[3]...

【黑马程序员】C语言学习笔记之指针(十一)

--------------------------------------------IOS期待与您交流!-------------------------------------------- 一...
  • kqygww
  • kqygww
  • 2014年03月16日 20:10
  • 863

C语言-指针的基础学习笔记(2)

3、字符串与指针 (1)字符串数组存放一个字符串,char  string[ ] = "c language!";  printf("%s\n", string)。此处是,一个数组名,代表字符数组的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习笔记5-C语言指针
举报原因:
原因补充:

(最多只允许输入30个字)