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;\n", p, *p, &p); //[p] = 0x7ffe12baad9c; [*p] = 0;  [&p] = 0x7ffe12baad90;
10     p = &a;
11     printf("[p] = %p; [*p] = %d; [&p] = %p;\n", p, *p, &p); //[p] = 0x7ffe12baad98; [*p] = 10; [&p] = 0x7ffe12baad90;
12     printf("[init] = %d;\n", &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;\n", &b, q, *q, &q); //[q] = 0x7ffe12baad9c; [*q] = 0;  [&q] = 0x7ffe12baad80;
18     *q = b;
19     printf("[&b] = %p; [q] = %p; [*q] = %d; [&q] = %p;\n", &b, q, *q, &q); //[q] = 0x7ffe12baad9c; [*q] = 20; [&q] = 0x7ffe12baad80;
20     printf("[&init] = %p; [init] = %d;\n", &init, init); //20
21     return 0;
22 }

代碼分析:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM