C 为什么我们需要地址操作符来访问二维字符串元素
为什么我们需要address运算符来访问二维字符串元素,而对于简单数组,我们不需要。对于简单数组,我们只使用下标表示法 前 而对于数组,我们只使用C 为什么我们需要地址操作符来访问二维字符串元素,c,C,为什么我们需要address运算符来访问二维字符串元素,而对于简单数组,我们不需要。对于简单数组,我们只使用下标表示法 前 而对于数组,我们只使用 printf("%d",a[2][3]); 其中a是整数数组。在第二个printf中,打印单个int。在第一个printf中,您打印一个字符串,即char数组。原因很简单,当使用%s作为格式说明符调用printf时,它需要一个char*类型的参数,而不是将其与%d进行比较时所期望的char,因为names[2][0]不表示字符串,而是该字符串中的字
printf("%d",a[2][3]);
其中a是整数数组。在第二个
printf
中,打印单个int
。在第一个printf
中,您打印一个字符串,即char
数组。原因很简单,当使用%s
作为格式说明符调用printf
时,它需要一个char*
类型的参数,而不是将其与%d
进行比较时所期望的char
,因为names[2][0]
不表示字符串,而是该字符串中的字符(在本例中,charp
)&names[2][0]
表示“给我该字符串中第一个字符的地址”,即字符串的开头
该语言需要一个指向字符的指针作为字符串。这是打印字符串的方法。在二维数组中存储字符串。即使是在一个简单的情况下,您有一个字符串,如
char*string=“Hello”代码>您可以这样打印它:
printf(“%s”,字符串)代码>其中字符串是指针。因此,当您要从数组中打印字符串时,需要获取其第一个元素的地址 格式说明符%s
用于输出以空字符'\0'
结尾的字符串(即字符序列)
如果有一个二维数组,其元素类型为char(如示例中所示),则可以使用下标运算符:
char masterlist[6][10] = {
"akshay",
"parag",
"raman",
"srinivas",
"gopal",
"rajesh"
};
printf("\nOriginal: %s %s", names[2], names[3] ) ;
名称[2]
和名称[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] );
两者都传递指向数组第一个元素的指针。要打印字符数组(字符串),需要为函数提供数组的第一个值(索引0)
因此您说的是&names[3][0]
,它基本上返回数组names
中第四个数组的第一个元素
它也相当于名称[3]
,因为它们都指向内存中的同一个位置。OP说:“其中a
是一个整数数组”。a
是,但a[2][3]
不是。你不需要&
也不需要[0]
。是的,这也解决了这个问题。
f( s );
f( &s[0] );