關於指針與取地址符
1.什么是指針?
(1)首先,我們要明白什么叫做指針變量名,對於 int *p,這里的指針變量名不是 p 而是 p ,類似與 Java 中定義數組是 int [] array ,所以我習慣將 p 叫做 int * 類型
(2)通俗的來說:指針就是地址,通過這段地址就可以找到以它為地址的那個內存單元
【保存地址使用的就是指針變量,所以是用變量名p=&a,而不是p = &a(定義時除外)】
(3)指針變量必須要初始化,否則不知道指向哪個地址(就是我們常說的野指針)
(4)指針就是用來存放地址的,並且可以通過這個地址來操作對應的內容。只要知道了一個變量的內存地址,那么我們就可以通過指針來操作塊內存空間
了解了這些之后,看一段代碼:
#include <stdio.h>
int main()
{
int n= 7;
int *p;
p = &n; //指針初始化,也可以寫作 int *p = &n;
printf("%d 的地址是 %p\n",n,p);
return 0;
}
n是int類型的,而p是int *類型的,所以他們的最后得到的結果的類型完全就不一樣了
int *p定 = &n,&是取地址符,得到的就是內存地址【指針保存地址,&用來取地址】
為了更好的理解,根據類型匹配:*p = n ;p = &n (= 表示等價於)
2.如何使用指針
使用指針和取地址符,解決了值傳遞只能通過“按值傳遞”這個問題,可以用指針和取地址符來操作:
繼續看一段代碼:
#include<stdio.h>
int main(void)
{
int n = 7;
int *p = &n;
printf("數值%d所在的地址是 %p\n", num, p);
printf("指針p所指向的地址為 %p , 該地址上所保存的值為%d\n", p, *p);
*p = 100;
printf("指針p所指向的地址為 %p , 該地址上所保存的值為%d\n", p, num);
return 0;
}
通過上面的程序和運行結果來看,指針所指的地址是不會改變的,但是可以通過操作符(解引用操作符),來返回指針p所指的對象,我們通過對p的賦值,改變了p指向的地址上的值,從而n的值發生改變