簡體   English   中英

學習C - 指針和內存尋址

[英]Learning C - Pointers and memory addressing

我正在學習C編程,我有一個關於指針的簡單問題......

我使用以下代碼來玩指針:

#include <stdio.h>

int main (int argc, const char * argv[]) {

int * c;

printf("%x\n",c);
return 0;
}

當我打印C的值時,我返回0.但是,當我打印&c(即printf(“&x \\ n”,&c)時,我在內存中得到一個地址...

打印指針時,我不應該在內存中獲取地址(即printf(“%x \\ n”,c)?

--- 編輯 ---

#include <stdio.h>
#include <stdlib.h>

int main (int argc, const char * argv[]) {

    char * a = malloc(11);
    printf("String please\n");
    scanf("%s",a);
    printf("%s",a);

}

問題是,為什么printf(“%s”,a)返回字符串而不是存儲在?中的地址?

我不應該使用* a跟隨指針然后打印字符串?

您當前的程序不正確。 您在第一次使用之前定義變量並且不設置值。 c的初始值不保證,但你很幸運,它等於0 這意味着c指向無處。 當你打印&c你打印變量c本身的地址。 實際上兩個版本都打印地址。

printf實際上是一個非常復雜的功能,可以通過為它提供正確的格式說明符來做各種技巧。

在你的字符串示例中:

printf("%s", a)

“%s”告訴printf函數應將以下變量視為字符串。 在C中,字符串是指向一個或多個char的指針,由包含0的char終止。這是一個非常常見的請求,這就是printf支持觸發這種相對復雜行為的格式說明符“%s”的原因。 如果要打印字符串指針中包含的地址,則必須使用之前找到的格式:

printf("%x\n",a);

它告訴printf將a的內容視為無符號整數,並將其打印在base 16中。

* a只是a指向的值,它只是一個字符。

你可以打印單個字符

printf("%c", *a);

有int * c; 如果打印c的值,則返回一個應該被解釋為整數值的內存地址的值。 在您的示例中,它可能是0或完全不同的東西,因為您沒有初始化c。

如果你打印&c你得到指針c的內存地址(存儲在堆棧中)。

#include <stdio.h>

int main (int argc, const char * argv[]) {

int * c;
int a=10;
c = &a;

printf("%x\n",c);
return 0;
}

這可能會澄清當你使int指針指向內存中的某些內容時會發生什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM