2015-04-02 45 views
-3

我以爲我對它們有了一個基本的瞭解,但顯然我沒有任何東西。試圖更好地理解指針

#include <stdio.h> 

void f(int *x, char *name) 
{ 
    *x = 4; 
    *name = "stan"; 
} 

int main() 
{ 
    int y = 10; 
    char name = "bob"; 
    f(&y, &name); 
    printf("%d and %s\n", y, name); 
} 

最初它只是使用int測試,但後來我加了第二個參數f函數與字符測試,現在我無法得到的代碼進行編譯。我想了解,但我似乎無法。

+0

在您使用指針之前,這些代碼是否工作過? 'char name =「bob」;'? – Hogan 2015-04-02 21:59:34

+0

你對'int'的理解是正確的。你對C字符串的理解是非常非常錯誤的。一般來說,我推薦閱讀一些關於[c]中的字符串的教程(http://www.tutorialspoint.com/cprogramming/c_strings.htm)。 'char'只是一個8位有符號整數。 C中的一個字符串是一個'chars'數組,通常表示爲'char []'或'char *',後者是一個指向'char'數組頭部的指針。 – aruisdante 2015-04-02 21:59:51

+1

c中的字符串是指向char的指針(因此char * mystring;或char mystring [])。 Hogan:char是一個8位整數,所以存在從char *到char的隱式轉換,指針被截斷。一些編譯器需要標誌來警告你這個 – Lectem 2015-04-02 22:01:05

回答

0

這是可以工作的代碼。

#include <stdio.h> 

void f(int *x, char **name) 
{ 
    *x = 4; 
    *name = "stan"; 
} 

int main() 
{ 
    int y = 10; 
    char *name = "bob"; 

    f(&y, &name); 
    printf("%d and %s\n", y, name); 
} 
+0

這確實對我有用,我也認爲它幫助我更好地理解C中的字符和字符串,謝謝。 – user3408678 2015-04-02 22:31:26

+0

YAY。 - 這是幫助我的最重要的事情......要知道在C語言中,c char指針和c char數組和字符串沒有區別。 – Hogan 2015-04-02 22:32:38

+0

我不認爲這是一個準確的說法。我正在學習的是指針和數組可以用於許多相同的事情,但實際上並不是同一件事。 – user3408678 2015-04-02 23:38:26

1

你必須定義一個數組char來實際存儲一個字符串,該字符串基本上是一個有序的字符集合,所以C字符串在一段時間後變得非常直觀。 對於「bob」您需要char name[4];作爲「bob」將存儲4個字符(讀取關於NULL終止)。但對於「斯坦」,你需要5個字符,所以你必須事先知道你將存儲在字符串中。 要傳遞數組到一個函數,該函數只需調用f(&y, name),因爲當傳遞給函數時(在C和C++中,在許多情況下,數組可能被當作指針處理​​)時,數組會降級爲指向其第一個元素的指針。這對於一個正確的以NULL結尾的字符串來說就足夠了,通常你還會添加一個int作爲參數來告訴函數數組的大小。 如果您想在f中將字符串文字(例如「stan」)分配給char數組(char指針),請不要取消引用指針,請編寫name="stan";,因爲char*類似char[]。 有時數組和指針的混合可能會讓你頭暈目眩,但是當你掌握它的時候你會發現它很容易,和C字符串一樣。

+0

感謝您的解釋 – user3408678 2015-04-02 22:22:53