簡體   English   中英

char *a[3] 是什么意思?

[英]What is the meaning of char *a[3]?

我如何理解代碼 char*a[3]? 這是否意味着聲明一個可以保存三個字符地址的數組?

#include <stdio.h>

    int main(void)
    {
        char *a;
        scanf("%s",a); 
        printf("%s \n",a);
        return 0;
    }

上面的代碼不起作用給出了輸出

(null)

我明白這是因為聲明的指針指向什么然后我運行了以下代碼:

#include <stdio.h>

    int main(void)
    {
        char *a[1];
        scanf("%s",a[0]); 
        printf("%s \n", a[0]);
        return 0;
    }

這個工作完美,可以無限量的字符串長度。 這是為什么?

這個工作完美,可以無限量的字符串長度。 這是為什么?

它們都是未定義的行為。 只是未定義的行為不能保證以任何特定方式失敗,它可能看起來正常工作,然后在不同情況下導致問題(可能包括在同一台機器上再次運行相同的程序)。 在我的機器上,如果我運行此代碼,它會崩潰。 潛在的問題是相同的: a[0]未初始化並且沒有指向任何有效的地方,就像第一個程序中的a一樣。 無論哪種方式,您都必須為正在讀取的字符串分配內存:

int main(void)
{
    char *a[1];
    a[0] = malloc(20);
    scanf("%19s", a[0]);
    printf("%s \n", a[0]);
    free(a[0]);
    return 0;
}

或者沒有動態內存分配:

int main(void)
{
    char a[20];
    scanf("%19s", a);
    printf("%s \n", a);
    return 0;
}

回答標題中的原始問題: char*a[3]意思是“聲明a as 和 3 個指向char指針的數組”。

char *a[3]是什么意思? 這是否意味着聲明一個可以保存三個字符地址的數組?

是的。

它是一個包含三個指針的數組。 指針必須是char *類型,這意味着它們引用一個char

char c1 = 'a';
char c2 = 'b';
char c3 = 'c';

char *a[3] = { &c1, &c2, &c3 };

printf("%c\n", *(a[0]));  // a

這些指針引用的char可以是字符數組的一部分,就像它們指向字符串中的字符一樣。

char s1[] = "abc";
char s2[] = "def";
char s3[] = "ghi";

char *a[3] = { s1, s2, s3 };

printf("%s\n", a[0]);  // abc

暫無
暫無

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

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