C語言中指針與取地址符&詳解


關於指針與取地址符

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的值發生改變


免責聲明!

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



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