c 语言输出指针的值,C 语言指针
C 語言指針
在本教程中,您將學習指針。什么是指針,如何使用它們以及在示例的幫助下使用它們時可能遇到的常見錯誤。
指針是 C和C ++ 編程的強大功能。在學習指針之前,讓我們學習一下C語言編程中的地址。
C 語言地址
如果程序中有變量var,則&var將在內存中提供其地址。
使用scanf()函數時,我們已多次使用地址。scanf("%d",?&var);
在此,用戶輸入的值存儲在var變量的地址中。讓我們舉一個可行的實例。#include?
int?main()
{
int?var?=?5;
printf("var:?%d\n",?var);
//?注意在var之前使用&
printf("address?of?var:?%p",?&var);
return?0;
}
輸出結果var:?5
var地址:?2686778
注意:運行上面的代碼時,您可能會獲得其他地址。
C 語言指針
指針(指針變量)是用于存儲地址而非值的特殊變量。
指針語法
這是我們如何聲明指針的方法。int*?p;
在這里,我們已經聲明了一個int類型的指針p。
您也可以通過以下方式聲明指針。int?*p1;
int?*?p2;
讓我們再舉一個聲明指針的實例。int*?p1,?p2;
在這里,我們聲明了一個指針p1和一個普通變量p2。
給指針分配地址
讓我們舉個實例。int*?pc,?c;
c?=?5;
pc?=?&c;
在此,將5分配給c變量。并且,將c的地址分配給pc指針。
獲取指針所指向的值
為了獲得指針所指向的內容的值,我們使用了解引用運算符(*)。例如:int*?pc,?c;
c?=?5;
pc?=?&c;
printf("%d",?*pc);???//?輸出:?5
此處,c的地址已分配給pc指針。為了獲取存儲在該地址中的值,我們使用了*pc。
改變指針指向的值
讓我們舉個實例。int*?pc,?c;
c?=?5;
pc?=?&c;
c?=?1;
printf("%d",?c);????//?輸出:?1
printf("%d",?*pc);??//?輸出:?1
我們已經將c地址分配給了pc指針。
然后,我們將的值更改c為1。由于pc和的地址c相同,因此*pc得到1。
讓我們再舉一個實例。int*?pc,?c;
c?=?5;
pc?=?&c;
*pc?=?1;
printf("%d",?*pc);??//?輸出:?1
printf("%d",?c);????//?輸出:?1
我們已經將c地址分配給了pc指針。
然后,我們使用* pc = 1;將* pc更改為1。 由于pc和c的地址相同,因此c等于1。
讓我們再舉一個實例。int*?pc,?c,?d;
c?=?5;
d?=?-15;
pc?=?&c;?printf("%d",?*pc);?//?輸出:?5
pc?=?&d;?printf("%d",?*pc);?//?輸出:?-15
最初,使用的地址c分配給pc指針pc = &c;。因為c是5,所以*pc給我們5。
然后,使用將地址d分配給pc指針pc = &d;。由于d是-15,所以*pc給我們-15。
示例:指針的工作方式
讓我們舉一個可行的實例。#include?
int?main()
{
int*?pc,?c;
c?=?22;
printf("c的地址:?%p\n",?&c);
printf("c的值:?%d\n\n",?c);??//?22
pc?=?&c;
printf("指針pc地址:?%p\n",?pc);
printf("指針pc內容:?%d\n\n",?*pc);?//?22
c?=?11;
printf("指針pc地址:?%p\n",?pc);
printf("指針pc內容:?%d\n\n",?*pc);?//?11
*pc?=?2;
printf("c的地址:?%p\n",?&c);
printf("c的值:?%d\n\n",?c);?//?2
return?0;
}
輸出結果c的地址:?003FFBF8
c的值:?22
指針pc地址:?003FFBF8
指針pc內容:?22
指針pc地址:?003FFBF8
指針pc內容:?11
c的地址:?003FFBF8
c的值:?2
該程序的用法int* pc, c;
這里創建了一個指針pc和一個普通變量c,都是int類型。由于pc和c沒有初始化在最初,指針pc指向沒有地址或一個隨機地址。變量c有一個地址,但包含隨機的垃圾值。
c = 22;
這是給變量c賦值22,也就是說,22被存儲在變量c的內存中。
pc = &c;
這將變量c的地址分配給指針pc。
c = 11;
這將11分配給變量c。
*pc = 2;
這會將指針pc指向的內存位置的值更改為2。
使用指針時的常見錯誤
假設您希望指針pc指向c的地址。 然后,int?c,?*pc;
//pc是地址,但c不是
pc?=?c;?//?Error
//&c是地址,但*?pc不是
*pc?=?&c;?//?Error
//&c和pc都是地址
pc?=?&c;
//c和*pc值
*pc?=?c;
這是指針語法初學者經常會感到困惑的示例。#include?
int?main()?{
int?c?=?5;
int?*p?=?&c;
printf("%d",?*p);??//?5
return?0;
}
使用時為什么沒有出現錯誤int?*p = &c;?
這是因為int?*p?=?&c;
相當于int?*p:
p?=?&c;
在這兩種情況下,我們都創建了一個指針p(不是*p)并給它賦值&c。
為了避免這種混亂,我們可以使用如下語句:int*?p?=?&c;
現在您知道了什么是指針,您將在下一個教程中學習指針與數組的關系。
總結
以上是生活随笔為你收集整理的c 语言输出指针的值,C 语言指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海信激光影院的产品特色
- 下一篇: lol上单瑞兹怎么出装?对线有什么注意事