• C语言笔记之指针


    一.指针含义

    1.a、*a与&a的区别

    a存储指向变量的地址,*a为指针的值,&a为指针的地址

    #include 
    
    int main(){
    	/** 测试代码部分一 **/
    	int a1=2;
    	
    	int *b1;
    	
    	b1=&a1;
    	
    	printf(" a1 = %d, &a1 = %d, b1 = %d, *b1 = %d, &b1 = %d\n\n",a1,&a1,b1,*b1,&b1);
    	
    	/** 测试代码部分二 **/
    	
    	int *a2;
    	
    	a2=&a2;
    	
    	printf(" a2 = %d, *a2 = %d, &a2 = %d\n\n",a2,*a2,&a2);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    测试结果

    二.指针用法

    1.直接赋值方式

    int *a = &value;
    
    • 1

    2.先定义后赋值

    int *b;
    b = &value;
    
    • 1
    • 2

    3.分配内存后赋值

    int *c = (int *)malloc(sizeof(int) * 1);
    *c = value;
    
    • 1
    • 2

    4.先定义、分配内存,最后赋值

    int *d;
    d = (int *)malloc(sizeof(int) * 1);
    *d = value;
    
    • 1
    • 2
    • 3
    #include 
    
    int main()
    {
    	/** 目标测试变量 **/
    	int value = 42;
    
    	/** 直接将指针赋值为变量的地址 **/
    	int *a = &value;
    
    	/** 先定义指针,再将地址赋值给指针 **/
    	int *b;
    
    	b=&value;// X 错误的写法--> *b=value;
    
    	/** 先给指针分配好内存,然后赋值 **/
    	int *c=(int *)malloc(sizeof(int)*1);
    
    	*c=value; // √其他写法--> c=&value;
    
    	/** 先定义指针.再分配内存,最后赋值 **/
    	int *d;
    
    	d = (int*)malloc(sizeof(int)*1);// X 错误的写法--> *d=(int*)malloc(sizeof(int)*1);
    
    	*d=value;
    
    	/** 各种情况的结果 **/
    	printf("---------value初始值为%d,地址为%d---------\n\n",value,&value);
    	
    	/** a :42, &a :6487704, sizeof(a):4 **/
    	printf("a 的值:%d, a 的地址为%d, a 所占的内存为%d\n\n", *a,&a,sizeof(a));
    
    	/** b :42, &b :6487700, sizeof(b):4 **/
    	printf("b 的值:%d, b 的地址为%d, b 所占的内存为%d\n\n", *b,&b,sizeof(b));
    
    	/** c :42, &c :6487696, sizeof(c):4 **/
    	printf("c 的值:%d, c 的地址为%d, c 所占的内存为%d\n\n", *c,&c,sizeof(c));
    
    	/** d :42, &d :6487692, sizeof(d):4 **/
    	printf("d 的值:%d, d 的地址为%d, d 所占的内存为%d\n\n", *d,&d,sizeof(d));
    
    	/**对value的值进行加1**/
    	value++;
    
    	/** 观察value值增加后的变化 **/
    	printf("---------在对value值进行加1后,各值的变化---------\n\n");
    
    	/** a :43, &a :6487704, sizeof(a):4 **/
    	printf("a 的值:%d, a 的地址为%d, a 所占的内存为%d\n\n", *a,&a,sizeof(a));
    
    	/** b :43, &b :6487700, sizeof(b):4 **/
    	printf("b 的值:%d, b 的地址为%d, b 所占的内存为%d\n\n", *b,&b,sizeof(b));
    
    	/** c :42, &c :6487696, sizeof(c):4 **/
    	printf("c 的值:%d, c 的地址为%d, c 所占的内存为%d\n\n", *c,&c,sizeof(c));
    
    	/** d :42, &d :6487692, sizeof(d):4 **/
    	printf("d 的值:%d, d 的地址为%d, d 所占的内存为%d\n", *d,&d,sizeof(d));
    
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    测试结果

  • 相关阅读:
    我的Windows10下的WSL的使用经历
    Linux动态库
    ChatGPT私有数据结合有什么效果?它难吗?
    Spring Cloud(八)分布式事务(*)
    Altium Designer,PCB处理最后GND以及铺铜经验
    通俗易懂说模型——RNN
    保姆级教程:Linux (Ubuntu) 部署流光卡片开源 API
    leetcode:231. 2 的幂(位运算)
    使用.NET Jieba.NET 的 PosSegmenter 实现中文分词匹配
    Android flow 每秒异步返回一个值
  • 原文地址:https://blog.csdn.net/qq_61637982/article/details/133893276