zoukankan      html  css  js  c++  java
  • C基础知识(4):指针--p=&a和*p=a的区别详解

    对于*p,[p = &a]和[*p = a]的区别详解

    (1) p=&a就是用a的地址对p赋值,&p不改变,变的是p

    (2) *p=a就是把p所指向的那一内存空间的值赋值为a,&p和p都不改变,变的是p所指向的那一内存空间的值

     1 #include <stdio.h>
     2 
     3 // 对于*p,[p = &a]和[*p = a]的区别详解
     4 int main() {
     5     int init = 0;
     6     // p=&a就是用a的地址对p赋值,&p不改变,变的是p
     7     int a = 10;
     8     int *p = &init;
     9     printf("[p] = %p; [*p] = %d; [&p] = %p;
    ", p, *p, &p); //[p] = 0x7ffe12baad9c; [*p] = 0;  [&p] = 0x7ffe12baad90;
    10     p = &a;
    11     printf("[p] = %p; [*p] = %d; [&p] = %p;
    ", p, *p, &p); //[p] = 0x7ffe12baad98; [*p] = 10; [&p] = 0x7ffe12baad90;
    12     printf("[init] = %d;
    ", &init, init); //0
    13 
    14     // *q=b就是把q所指向的那一内存空间的值赋值为b,&q q都不改变,变的是q所指向的那一内存空间的值,即init的值
    15     int b = 20;
    16     int *q = &init;
    17     printf("[&b] = %p; [q] = %p; [*q] = %d; [&q] = %p;
    ", &b, q, *q, &q); //[q] = 0x7ffe12baad9c; [*q] = 0;  [&q] = 0x7ffe12baad80;
    18     *q = b;
    19     printf("[&b] = %p; [q] = %p; [*q] = %d; [&q] = %p;
    ", &b, q, *q, &q); //[q] = 0x7ffe12baad9c; [*q] = 20; [&q] = 0x7ffe12baad80;
    20     printf("[&init] = %p; [init] = %d;
    ", &init, init); //20
    21     return 0;
    22 }

    代码分析:

  • 相关阅读:
    linux下的shell 快捷键
    Python3.x和Python2.x的区别
    [Python2.x] 利用commands模块执行Linux shell命令
    redis缓存策略
    高并发解决方案
    java8 lambda表达式应用
    java读写分离的实现
    数据库读写分离
    大数据量处理方案:分布式数据库
    google的CacheBuilder缓存
  • 原文地址:https://www.cnblogs.com/storml/p/7766702.html
Copyright © 2011-2022 走看看