• 一、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
  • 相关阅读:
    Property和Attribute的区别
    如何高效安装MindSpore的GPU版本
    【刷题篇】笔试真题
    5G网络建设 - 华为OD统一考试(C卷)
    ES集群安装遇到的一些错误
    【论文笔记】Dynamic Convolution: Attention over Convolution Kernels
    Sentinel 与 Hystrix:云原生时代的故障隔离与服务降级
    计算机毕业设计ssm基于协同过滤算法的竞赛管理系统ht5jj系统+程序+源码+lw+远程部署
    时空数据挖掘三(城市计算)
    内网渗透——macOS上搭建Web服务器
  • 原文地址:https://blog.csdn.net/weixin_46765649/article/details/126717911