亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

C 語(yǔ)言基礎(chǔ)教程

C 語(yǔ)言流程控制

C 語(yǔ)言函數(shù)

C 語(yǔ)言數(shù)組

C 語(yǔ)言指針

C 語(yǔ)言字符串

C 語(yǔ)言結(jié)構(gòu)體

C 語(yǔ)言文件

C 其他

C 語(yǔ)言參考手冊(cè)

C 語(yǔ)言指針

在本教程中,您將學(xué)習(xí)指針。什么是指針,如何使用它們以及在示例的幫助下使用它們時(shí)可能遇到的常見錯(cuò)誤。

指針是 C和C ++ 編程的強(qiáng)大功能。在學(xué)習(xí)指針之前,讓我們學(xué)習(xí)一下C語(yǔ)言編程中的地址。

C 語(yǔ)言地址

如果程序中有變量var,則&var將在內(nèi)存中提供其地址。

使用scanf()函數(shù)時(shí),我們已多次使用地址。

scanf("%d", &var);

在此,用戶輸入的值存儲(chǔ)在var變量的地址中。讓我們舉一個(gè)可行的實(shí)例。

#include <stdio.h>
int main()
{
  int var = 5;
  printf("var: %d\n", var);

  // 注意在var之前使用&
  printf("address of var: %p", &var);  
  return 0;
}

輸出結(jié)果

var: 5 
var地址: 2686778

注意:運(yùn)行上面的代碼時(shí),您可能會(huì)獲得其他地址。

C 語(yǔ)言指針

指針(指針變量)是用于存儲(chǔ)地址而非值的特殊變量。

指針語(yǔ)法

這是我們?nèi)绾温暶髦羔樀姆椒ā?/p>

int* p;

在這里,我們已經(jīng)聲明了一個(gè)int類型的指針p。

您也可以通過以下方式聲明指針。

int *p1;
int * p2;

讓我們?cè)倥e一個(gè)聲明指針的實(shí)例。

int* p1, p2;

在這里,我們聲明了一個(gè)指針p1和一個(gè)普通變量p2。

給指針分配地址

讓我們舉個(gè)實(shí)例。

int* pc, c;
c = 5;
pc = &c;

在此,將5分配給c變量。并且,將c的地址分配給pc指針。

獲取指針?biāo)赶虻闹?/h3>

為了獲得指針?biāo)赶虻膬?nèi)容的值,我們使用了解引用運(yùn)算符(*)。例如:

int* pc, c;
c = 5;
pc = &c;
printf("%d", *pc);   // 輸出: 5

此處,c的地址已分配給pc指針。為了獲取存儲(chǔ)在該地址中的值,我們使用了*pc。

改變指針指向的值

讓我們舉個(gè)實(shí)例。

int* pc, c;
c = 5;
pc = &c;
c = 1;
printf("%d", c);    // 輸出: 1
printf("%d", *pc);  // 輸出: 1

我們已經(jīng)將c地址分配給了pc指針。

然后,我們將的值更改c為1。由于pc和的地址c相同,因此*pc得到1。

讓我們?cè)倥e一個(gè)實(shí)例。

int* pc, c;
c = 5;
pc = &c;
*pc = 1;
printf("%d", *pc);  // 輸出: 1
printf("%d", c);    // 輸出: 1

我們已經(jīng)將c地址分配給了pc指針。

然后,我們使用* pc = 1;將* pc更改為1。 由于pc和c的地址相同,因此c等于1。

讓我們?cè)倥e一個(gè)實(shí)例。

int* pc, c, d;
c = 5;
d = -15;

pc = &c; printf("%d", *pc); // 輸出: 5
pc = &d; printf("%d", *pc); // 輸出: -15

最初,使用的地址c分配給pc指針pc = &c;。因?yàn)閏是5,所以*pc給我們5。

然后,使用將地址d分配給pc指針pc = &d;。由于d是-15,所以*pc給我們-15。

示例:指針的工作方式

讓我們舉一個(gè)可行的實(shí)例。

#include <stdio.h>
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內(nèi)容: %d\n\n", *pc); // 22
   
   c = 11;
   printf("指針pc地址: %p\n", pc);
   printf("指針pc內(nèi)容: %d\n\n", *pc); // 11
   
   *pc = 2;
   printf("c的地址: %p\n", &c);
   printf("c的值: %d\n\n", c); // 2
   return 0;
}

輸出結(jié)果

c的地址: 003FFBF8
c的值: 22

指針pc地址: 003FFBF8
指針pc內(nèi)容: 22

指針pc地址: 003FFBF8
指針pc內(nèi)容: 11

c的地址: 003FFBF8
c的值: 2

該程序的用法

  1. int* pc, c;
    將創(chuàng)建一個(gè)指針變量和一個(gè)普通變量。
    這里創(chuàng)建了一個(gè)指針pc和一個(gè)普通變量c,都是int類型。由于pc和c沒有初始化在最初,指針pc指向沒有地址或一個(gè)隨機(jī)地址。變量c有一個(gè)地址,但包含隨機(jī)的垃圾值。  

  2. c = 22;
    22被分配給變量c。
    這是給變量c賦值22,也就是說,22被存儲(chǔ)在變量c的內(nèi)存中。
     

  3. pc = &c;
    變量c的地址分配給指針pc。
    這將變量c的地址分配給指針pc。
     

  4. c = 11;
    11分配給變量c。
    這將11分配給變量c。
     

  5. *pc = 2;
    將5分配給指針變量的地址。
    這會(huì)將指針pc指向的內(nèi)存位置的值更改為2。

使用指針時(shí)的常見錯(cuò)誤

假設(shè)您希望指針pc指向c的地址。 然后,

int c, *pc;

//pc是地址,但c不是
pc = c; // Error

//&c是地址,但* pc不是
*pc = &c; // Error

//&c和pc都是地址
pc = &c;

//c和*pc值
*pc = c;

這是指針語(yǔ)法初學(xué)者經(jīng)常會(huì)感到困惑的示例。

#include <stdio.h>
int main() {
   int c = 5;
   int *p = &c;

   printf("%d", *p);  // 5
   return 0; 
}

使用時(shí)為什么沒有出現(xiàn)錯(cuò)誤int *p = &c;?

這是因?yàn)?/p>

int *p = &c;

相當(dāng)于

int *p:
p = &c;

在這兩種情況下,我們都創(chuàng)建了一個(gè)指針p(不是*p)并給它賦值&c。

為了避免這種混亂,我們可以使用如下語(yǔ)句:

int* p = &c;

現(xiàn)在您知道了什么是指針,您將在下一個(gè)教程中學(xué)習(xí)指針與數(shù)組的關(guān)系。