對於*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 }
代碼分析: