学习笔记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是类型修饰符。

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

 

各种语言中对指针的叫法

如果没有指针,就无法构造正统的数据结构, 因此,比较成熟的、正统的编程语言,必定会存在指针3。 3以前, FORTRAN 、 COBOL 和BASIC 中 都没有指针,但是在 fortran...
  • turingbooks
  • turingbooks
  • 2013年01月18日 16:14
  • 2312

Go语言指针

1. 指针的概念 概念 说明 变量 是一种占位符,用于引用计算机的内存地址。可理解为内存地址的标签 指针 表示内存地址,表示地址的指向。指针是一个指向另一个变量内存地址的值 ...
  • huwh_
  • huwh_
  • 2017年09月07日 12:52
  • 366

C语言指针教程----入门到精通<一>

有一个传说,指针是C语言的精髓;可同时,指针似乎也是C中很难理解的一部分。博主希望在自己复习的同时,写出一些学习心得和体会,供大家讨论。...
  • u014254779
  • u014254779
  • 2014年09月04日 12:39
  • 2503

go语言指针与C指针的异同

总结一下golang中的指针与C语言的指针的用法。 总体一致:  C的代码:  ? 1 2 3 4 int*number; number = (int*) mall...
  • whatday
  • whatday
  • 2017年07月10日 17:13
  • 517

从一个简单的例子深入看待c语言指针

今天我在写二叉树程序时遇到一个让我郁闷整晚的例子,现在终于想通了,特撰此博文,告诫自己及广大同道今后勿犯此错误! 我写了一个将字符串中括号去除的程序: #include char *RidBracke...
  • pq159753159
  • pq159753159
  • 2013年12月16日 01:25
  • 952

12.3 C语言指针的简单示例

前边我们提到了,指针的意义往往在小程序里是体现不出来的,对于简单程序来说,有时候用了指针,反而可能比没用指针还麻烦,但是为了让大家巩固一下指针的用法,我还是写了个使用指针的流水灯程序,目的是让大家从简...
  • softn
  • softn
  • 2016年07月07日 05:55
  • 499

C语言指针表达式(图解)

C语言是软件编程的基础,不管你使用什么语言都会有必要用上它的时候,Android的原生开发NDK就是可以在Java层调用C/C++代码,iOS的objective-c也是在C语言上的一层封装实现的,想...
  • a5533348
  • a5533348
  • 2015年01月19日 13:55
  • 1387

深入理解C指针学习笔记(四)

1.3指针操作符指针常用的操作符如下表: 1.31指针的算数运算数据指针可以执行以下几种算术运算: 给指针加上整数 从指针减去整数 两个指针相减 比较两个指针 1.给指针加上整数给指针加上一个整数实...
  • u014630623
  • u014630623
  • 2016年03月24日 21:20
  • 408

C语言中的指针加减偏移量

 首先看一段程序:#include int main(){ int a[5] = {1, 2, 3, 4, 5}; int* p = (int*)(&a + 1); printf("%d, %d /n...
  • dobest9014
  • dobest9014
  • 2010年03月11日 15:29
  • 20496

黑马程序员——C语言基础——指针编程练习题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 今天复习了一下指针的相关知识,并且在网上搜了一道小的编程练习题,大概题意如下: 有n个整数,使...
  • Elors
  • Elors
  • 2015年06月01日 23:07
  • 1754
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习笔记5-C语言指针
举报原因:
原因补充:

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