C语言高级指针复习总结(点赞加收藏)

本文介绍C高级语言中的指针用法

一、指针的介绍

1.指针的定义

        在了解指针之前,我们先了解程序的运行的本质就是操作内存,而指针就是C语言中直接操作内存的一个工具。下面我们再来说指针是什么?在C程序中 "指针" 通常有两个含义:1) 表示内存的地址 ;2) 表示一个 存放内存地址的 变量。而内存的地址:  它实际是一个地址或者指针,它是一个常量,但存放内存地址的 变量:  它实际是一个指针变量 用内存空间。

2.指针变量的表示

        指针变量的表示是以 {存储类型   数据类型  变量名} 这个格式.

        例如   auto   int *   p     

        它的含义是 定义了一个指针变量p, 该变量将会存储 一个地址 该地址 所在的内存 是 int类型

        &+变量名    例如 &p 取变量地址运算   

        指针变量 的 赋值:   指针变量 = 地址常量 或 其他指针变量

3.指针的使用

        *指针取值运算符

        *指针变量   表示取出 指针变量 指向的 内存中的 值

        示例 int *p = &a;    *p 等同于 a

        

字节对齐:  int 4字节对齐   表示其地址 一定能被4整数 
           short 2字节对齐 表示其地址 一定能被2整数

    指针 与 整型运算 : 
    指针 +或- 一个整数:  其结果是一个对应类型的地址 
    表示 对当前指针 (-)前方对应个数的类型 的地址 
    表示 对当前指针 (+)后方对应个数的类型 的地址 
    
数组名: 
    是一个地址  元素类型的地址   元素类型 * 

4.指针的存储空间

假设const char *p = "hello";  p指向了一个 常量区域的内存地址
    *++p; 表达式的值 为 'e'
    
    char s[]="hello"; char *p = s;  p 指向 变量s 的内存地址  
    (*p)++; 表达式的值 为  'h'
==  s[0]++;    
==  'h'  ;  s[]= "iello";
    *p++;

 5.指针的表示形式

下面列举了一些常用的指针可能会出现的一些形式  ,看这个可以对指针有更清晰的了解。

 

6.二级指针

二级指针:  即 指 一个指针指向了 另一指针  该指针中存放的是 另一个指针的地址 

int a;
int *p = &a; 
int **pp = &p;  二级指针定义 

指针数组:  即一个数组 中存放的元素 是指针类型  这个数组即指针数组
int *arr[5];
int **p=arr; //二级指针
    
字符串指针数组: 
const char *arr1[3] = {"hello", "world", "你好"};
const char **pp = arr; // 二级指针    
二维数组 与 数组指针: 

数组指针:  一个指针 指向一个数组   &数组名

int arr[5];
int* p = arr;

int arr[2][3];  其中一维元素的类型  int  [3];
int  (*p)[3] = arr; // 数组指针 

结果:

 7.const关键字

 修饰变量 表示该变量 是只读的  不能重新赋值
const char *p = "hello";

char s[] = "hello";
char *p = s; 

    *p       ; 表示*p 可读可写            p是可读可写的
    const *p ; 表示*p 只读                p是可读可写的 
    * constp ; 表示 p 只读                *p可读可写的 
    const * const p; 表示 p 只读       *p也只读 

 8.函数

函数: 
    (1) 函数定义 
    返回值类型  函数名 (形参列表) {  函数体 }
    (2) 函数声明 
    返回值类型  函数名 (形参列表);  // 函数原型

函数5要素: 
    1) 功能明确 
    2) 函数原型 
    3) 参数 作用 传参方式 
    4) 返回值 
    5) 注意事项  bug 部分

    (3) 函数调用 
    函数名(实参列表);   
    
    (4) 传参 
        复制传参  实参复制其值 赋值给形参  函数中操作的是形参 
        地址传参  将实参的地址 赋值给形参(指针类型)  函数可以通过这个指针操作实参 

函数类型: 
    int func(int *a,int *b);
    其类型为  int (int *,int *);

    如何定义函数指针 : int (*p) (int *,int *);
    
    int arr[3];
    int (*p)[3] =&arr;
    int        *p    = arr;

函数名:  
        1) 代指这个函数   
        2) 代指这个函数 的 首地址(函数入口地址)
函数指针的使用: 
        通过该指针调用这个函数  除此外,其他指针操作均不能使用
        1) (*函数指针)(参数表)
        2) 函数指针(参数表)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值