• 一、C语言[指针]


    一、指针

    1.普通指针

    定义:char *a;
    定义解释:定义的类型根据指针想要指向内存地址的对应类型选择

    1.1 整型、浮点型、字符型

    int main(){
        int a=66;;
        int *b;
        b = &a;
        printf("%d",*b); //66
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解释:

    1. b=&a;是将a对应的内存地址保存到指针b;
    2. printf("%d",*b);‘*’在定义时是申明指针类型,在其它地方表示取地址对应的实际存储数据

    2.数组指针

    解释:数组指针指针数组有一定的区别,数组指针主要是为了类型的对应指针数组主要是数组里面放着许多指针

    2.1 一维数组

    int main() {
        int b[] = { 11,21,31,41,51 };
        int* c;
        c = b;
        printf("%d\n", *c); //11
        printf("%d\n", *(c + 1)); //21
        printf("%d\n", *c + 1); // 12
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    解释:

    1. c=b;b没有加取地址符号,因为数组本身就是保存的数组首地址
    2. printf("%d",*c);数组本身,在这里就是c保存的数组首地址也就是c[0]的地址,故打印出11
    3. printf("%d\n", *(c + 1));c+1实际是增加一个对应类型的长度,比如int增加4,char增加1(实际在此就是找到下一个也就是21)
    4. printf("%d\n", *c + 1);优先级问题‘*’优先级高,故先取出11然后为其+1

    2.2 二维数组

    注意:二维数组需要用数组指针对应

    int main() {
        int a[2][3] = { {11,55,66000},{555,888,9999} };
        int (* b)[3]; //这就是数组指针
        b = a;
        printf("%d\n", **b);//11
        printf("%d\n", **(b+1));//555
        printf("%d", *(*b+2));//66000
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解释:

    1. printf("%d\n", **b); 解释:‘*’是右结合,先*b表示到{11,55,66000}再加*具体到第一位上
    2. printf("%d\n", **(b+1));解释:先*(b+1){555,888,9999}然后再加*具体到第一位上
    3. printf("%d", *(*b+2));解释:先(*b+2){11,55,66000}然后再加*具体到第三位

    3.指针数组

    格式:char *a[10]
    解释:是指一个数组里面装着n个指针(这里就是10个char*),也即指针数组是一个数组

    4.字符串指针

    前要:字符串指针跟前面两个有所不同

    	const char* a = "abcdefg";
    	printf("%s", a);
    
    • 1
    • 2

    区别:字符串指针把字符串存储在常量区,且char *a只是保存ancdefg的首地址**,常量区意味着字符串指针不能修改**,数组字符串(cahr a[10]="abc")存储在全局数据区或栈区,可以修改

    int main() {
    	const char* a = "abcdefg";
    	char b[] = "a12226";
    	a[2] = 'd'; //错误 常量区
    	b[5] = 'c';//正确 全局数据区或栈区
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    特点:字符串指针可以重新指向

    int main() {
    	const char* a = "abcdefg";
    	printf("%s\n", a);// abcdefg
    	a = "123456aa";
    	printf("%s", a);// 123456aa
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    CentOS7安装superset2.0
    【HTML5】【CSS3】CSS3新增知识概述(1)
    编程狂人|大型系统存储层迁移实践
    view-design 全局引入与按需引入
    linux内核printk的一些并发处理
    【云原生之K8s】 K8s资源控制及探针检查
    网络是怎样连接的--TCP大致控制流程
    mybatis中的XML文件配置->mybatis-config.xml+XxxxMapper.xml-SQL
    知识图谱(2)词汇挖掘与实体识别
    人群环境中基于深度强化学习的移动机器人避障算法
  • 原文地址:https://blog.csdn.net/weixin_46765649/article/details/126717911