c语言入门到c++使用高手: c语言入门之指针(九)

第九章 指针

第九节 指针数组, 指针的指针, main函数参数, 小节

1. 指针数组概念回顾

  • 一个数组,其元素均为指针类型数据,称为指针数组,

  • 指针数组的定义形式:
    类型标识符 *数组名[数字长度说明] //int *p[4],每个数组元素都可以看作是一个指针变量,
    都可以指向一个指针变量

  • 数组指针 int (*p)[4],指向一维数组的指针变量

#include <iostream>
#include <cstring>

int main() {
    //指针数组
    char *pName[] = {"C++", "JAVA", "PYTHON", "GO", "CSHARP"};
    int bytes = sizeof(pName);//每个指针变量占8个字节,这点要注意!!
    printf("bytes of pName: %d\n", bytes);
    int len = sizeof(pName) / sizeof(char *);
    printf("length of pName: %d\n", len);
    printf("%d\n", sizeof(char));

    char *p2 = "JAVA";//把字符串的首地址赋给指针

    int i;
    for (i = 0; i < len; i++) {
        printf("pName[%d]: %s\n", i, pName[i]);
    }
    printf("************************\n");

    char *ptmp;
    ptmp = pName[0];//ptmp指向C++
    pName[0] = pName[1];//pName[0]指向JAVA
    pName[1] = ptmp;//pName[1]指向C++
    for (i = 0; i < len; i++) {
        printf("pName[%d]: %s\n", i, pName[i]);
    }
    printf("************************\n");

    return 0;
}

2. 指向指针的指针

  • 用来指向指针变量的变量,简称指向指针的指针
 // *(*p)表示指针变量p指向指针变量,*p是p所指向的指针变量
 char **p;//定义了一个指向字符串指针变量的指针变量
 int **pInt;//定义了一个指向整型指针变量的指针变量

  • 实例
#include <iostream>
#include <cstring>

int main() {
    //指针数组
    char *pName[] = {"C++", "JAVA", "PYTHON", "GO", "CSHARP"};
    char **pp;//定义了一个指向字符串指针变量的指针变量
    pp = &pName[0];//*pp = pName[0]
    printf("*pp = %s\n", *pp);

    int abc = 5;
    int *pabc = &abc;//指向整型数据的指针
    int **ppabc = &pabc;//指向指针的指针
    printf("abc = %d\n", abc);
    printf("*pabc = %d\n", *pabc);
    printf("**ppabc = %d\n", **ppabc);
    return 0;
}

3. 指针数组做main函数形参

  • 指针数组的重要应用是能够做main函数的参数

  • 指针数组可以接收不确定长度的参数,灵活性很强

#include <iostream>
#include <cstring>

//添加了两个形参,第一个形参整型,第二个形参是指针数组
// argc保存的是argv指针数组的元素个数
// argv[0]保存的是当前可执行文件的完整路径文件名

int main(int argc, char *argv[]) {
    int i;
    printf("argc: %d\n", argc);
    for (i = 0; i < argc; i++) {
//        printf("argv[%d]: %s\n", i, argv[i]);
        printf("argv[%d]: %s\n", i, *argv);
        argv++;
    }
    return 0;
}

4. 本章小节

指针数据类型
定义含义
int i定义整型变量
int *pp为指向整型数据的指针变量
int a[n]定义整型数组a,它有n个元素
int *p[n]定义指针数组p,它由n个指向征信数据的指针元素组成
int (*p)[n]p为指向包含n个元素的一维数组数组的指针变量
int f()函数f,返回一个整型值
int *p()函数p,返回一个指针,这个指针指向一个整型数据
int (*p)()p是一个指向函数的指针,这个函数返回一个整型值
int **pp是一个指针变量,指向另外一个整型数据的指针
指针运算小结
  • 指针变量的加减(p++, p–)

  • 指针变量的赋值(int *p,不能直接赋值地址),只能够将变量已经分配的
    地址赋值给指针变量

  • 指针变量可以为空值,表示不指向任何变量

// NULL就是整数0,使p指向地址为0的单元
// 系统会保证地址为0这个单元不存放任何有效数据
int *p = NULL;
if (p == NULL){
    p = &a
}
  • void*型指针:万能型指针变量
#include <iostream>
#include <cstring>

int main(int argc, char *argv[]) {
    int a = 3;
    int *p = &a;

    float bf = 56.f;
    float *pf = &bf;

    void *pwn = NULL;
    pwn = p;
    pwn = pf;
    pf = (float *) pwn;

    return 0;
}
总结
  • 优点: 效率高

  • 缺点: 太过灵活

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值