[英]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.