zoukankan      html  css  js  c++  java
  • 指针与字符串(篇七)

    1. 指针
      (1)什么是指针
      指针是一个特殊的变量,它里面存储的数值被解释成内存里的一个地址!
      a. 指针的类型
      b. 指针所指向的类型
      c. 指针的值或者叫指针所指向的内存区
      d. 指针本身所占据的内存区

    (2)定义及初始化
    指针类型是一种特殊类型

    类型说明符 空格(星号) 指针变量名称;
    类型说明符 (星号) 空格 指针变量名称;
    类型说明符 空格 (星号) 空格 指针变量名称;

    *:取值运算符,间接运算符
    &:取地址符号

    *& = 1; // * 与 & 可以理解为一对倒数

    例如:
    int *pa;
    char *pc;
    double *pd;

    初始化:
    int num = 88;
    int *pa = # //定义的同时初始化
    int *pb; //定义一个整型指针变量
    pb = # //初始化指针变量

    int *pc = NULL; //NULL 为空地址,即指针的零值
    pc = pa; //可以将指针变量赋给相同类型的指针

    初始化的必要性:防止野指针的出现
    野指针:
    未初始化,或者其指向的内存被释放,而指针没有被置空

    危害:
    造成系统资源浪费,容易造成未知的致命错误!!

    野指针的值不确定,不可访问其值,在实际应用中,应避免野指针的使用!!!

    (3)地址的访问
    *:间接访问运算符
    &:取地址运算符

    	int a = 10;
    	int *pa = &a;
    	
    	*pa = 10;
    	a = 10;
    	
    	int *pa = NULL;
    	printf("*pa = %d
    ", *pa); 	//Error,空指针不可访问其值
    
    	int *pa, pb, pc;  //有几个指针???
    	pa 为整型指针变量
    	pb,pc为整型变量
    

    (4)指针的大小

    sizeof(char *)   = 8
    sizeof(short *)  = 8
    sizeof(int *)    = 8
    sizeof(long *)   = 8
    sizeof(float *)  = 8
    sizeof(double *) = 8
    
    指针的大小与数据类型无关!
    64位机:8 Byte
    32位机:4 Byte
    

    (5)指针与数组
    int arr[7] = {1,2,3,4,5,6,7};

    	arr:
    	&arr[0]:
    	&arr:
    	
    	int *pa = arr;
    	int *pb = &arr[0];
    	int *pc = &arr[3];
    	
    	数组元素的访问:
    	通过下标形式:
    		arr[i];
    		pa[i];
    	通过偏移量的形式:
    		*(arr + i);
    		*(pa + i);
    

    (6)指针的运算
    减法运算:
    两指针相减,表示两个地址之间的距离;

    	int a = 2;
    	int b = 5;
    	
    	int *pa = &a;
    	int *pb = &b;
    	
    	pa - pb; //表示 pa 与 pb 之间的距离
    	
    自增运算:
    	++:
    		pa++: 表示 pa 向高地址方向移动
    	--:
    		pa--: 表示 pa 向低地址方向移动
    
    加减一个整数:
    	pa + n:表示将指针向高地址方向移动
    		移动字节数:
    			n * sizeof(指针所指向的类型)
    			
    		例如;
    			int *pa;
    			pa + 4;
    			
    			偏移: 4 × sizeof(int) = 16 Byte;	
    	pa - n
    关系运算:
    	pa == pb: pa , pb 指向同一块内存
    	pa < pb:
    	pa > pb:	
    	pa == NULL:	pa 是一个空指针
    	pa != NULL: pa 不是一个空指针
    

    (7)指针的几个概念
    类型说明符 *指针变量名;
    指针的类型:
    把指针声明语句里的指针名去掉,剩余的部分即为指针的类型
    即指针的类型为:
    类型说明符 *

    指针所指向的类型:
    	去掉指针变量名及其前面的一个 *,剩余的部分即为指针指向的类型
    	即:
    		类型说明符
    	
    指针的值:
    	是指指针本身存储的值,这个值被编译器当作地址
    	
    	指针所指向的内存区就是从指针值所代表的内存地址开始,长度为
    	sizeof(指针所指向的类型) 的一片内存区;
    	
    指针本身所占据的内存区:
    	sizeof(指针的类型);
    	32 OS: 4 Byte
    	64 OS: 8 Byte
    
    1. 字符串
      (1)定义
      由双引号扩起来的字符序列集合,我们称之为字符串
      字符串常量:
      “a”
      “abfnd”
      “123sfs”
      “fsg23ter:njbv”

      ‘a’ 与 “a” 之间的区别:
      ‘a’ 一个字节
      “a” 两个字节

      字符串:以 ‘’ 作为结束标志,在字符串中,通常不显示出来,但其是存在的

      C 中无字符串对应的数据类型
      通常使用字符数组来存储字符串:
      char arr[32] = {‘1’, ‘2’, ‘a’};
      char buf[32] = {“hello, World!”};
      char str[16] = “hello”;

      char af[5] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’};
      char bf[5] = “abcde”; //Error

    (2)字符串的输入和输出 — 占位符:%s
    a. printf()/scanf()
    printf() 需加换行符号

    b. puts()/gets()
    	puts 函数自动换行
    	gets()  //有 bug 不建议使用!!!!
    

    (3)字符串与指针
    同数组与指针类似

    (4)常用字符串处理函数
    a. 字符串长度:strlen():
    不包含字符串结束标志: ‘’

    b. 字符串拷贝:strcpy()
    	strcpy(destArray, srcArray)
    	将 srcArray 拷贝到 destArray 中
    	拷贝时, destArray 要有足够大的空间,否则会出现拷贝错误
    	
    c. 字符串比较:strcmp()
    d. 字符串拼接:strcat()
    
    千里之行,始于足下!
  • 相关阅读:
    mysql添加用户和密码
    常用正则表达式
    锐捷配置telnet
    Cisco配置aaa验证
    华为交换机端口镜像配置
    华为交换机boot默认密码
    python自动化运维常用模块安装
    python交互模式下tab键自动补全
    python脚本检查TCP端口是否正常
    python脚本获取主机Mac地址
  • 原文地址:https://www.cnblogs.com/MINAIot/p/13041014.html
Copyright © 2011-2022 走看看