为什么我们需要地址运算符来访问二维字符串元素,而在简单数组的情况下我们不需要。我们只是在简单数组的情况下使用下标表示法 对于前
char masterlist[6][10] = {
"akshay",
"parag",
"raman",
"srinivas",
"gopal",
"rajesh"
};
printf("\nOriginal: %s %s", &names[2][0], &names[3][0] ) ;
而在数组的情况下,我们只使用
printf("%d",a[2][3]);
其中a是整数数组。
答案 0 :(得分:2)
原因很简单,因为当用printf
作为格式说明符调用%s
时,它需要一个类型为char *
的参数,而不是char
的参数。如果将其与%d
进行比较。
答案 1 :(得分:1)
格式说明符%s
用于输出字符串 - 即字符序列 - 以空字符'\0'
结尾。
如果你有一个二维数组,其元素类型为char,如你的例子所示,那么你可以使用下标运算符:
char masterlist[6][10] = {
"akshay",
"parag",
"raman",
"srinivas",
"gopal",
"rajesh"
};
printf("\nOriginal: %s %s", names[2], names[3] ) ;
names[2]
和names[3]
都有char [10]
类型,代表字符串。
如果要在使用以下语句时与整数数组进行比较:
printf("%d",a[2][3]);
然后输出数组的元素。您可以为原始字符数组编写相同的方法:
printf("%c", names[2][3] ) ;
此语句将输出字符'a'(如果我没有记错的话)。
如果要输出整个字符串而不是数组中的单个元素,则必须使用上面显示的代码。
考虑一个简化的例子。我们假设有一个函数
void f( const char s[10] );
此函数声明等同于
void f( const char *s );
并且两者都声明了相同的一个函数。
这是一个作为函数参数传递的数组,将调整为指向其第一个元素的指针。如果你有一个数组
char s[10] = "Hello";
然后这些表达式是等价的
f( s );
f( &s[0] );
两者都传递一个指向数组第一个元素的指针。
答案 2 :(得分:0)
在第二个printf
中,您打印一个int
。在第一个printf
中,您打印一个字符串,即char
数组。
答案 3 :(得分:0)
因为names[2][0]
不代表字符串,所以它是来自该字符串的字符(在本例中为char p
)。 &names[2][0]
表示"给我字符串中第一个字符的地址",即。字符串的开头。
该语言需要一个指向char的指针作为字符串。
答案 4 :(得分:0)
这是打印字符串的方法。在二维数组中,您可以存储字符串。即使在你有一个像char *string="Hello";
这样的字符串的简单情况下,你也会像这样打印它:
printf("%s", string);
其中string是指针。因此,当您想要从数组中打印字符串时,您需要获取其第一个元素的地址。
答案 5 :(得分:0)
要打印出一个字符数组(一个字符串),您需要为该函数提供该数组的第一个值(索引0)。
因此你说的是&names[3][0]
,它基本上返回数组names
中第4个数组的第一个元素。
它也等同于names[3]
,因为它们都指向内存中的相同位置。