[英]argv function and string as address in C language
题。 诸如“ C编程”之类的字符串如何被编译为如下的地址值?
#include <stdio.h>
void ShowAllString(int argc, char * argv[])
{
int i;
for(i=0; i<argc; i++)
printf("%s \n", argv[i]);
}
int main(void)
{
char * str[3]={
"C Programming",
"C++ Programming",
"JAVA Programming" };
ShowAllString(3, str);
return 0;
}
我的类比如下:如果可以,请更正我。
char * argv []如果在参数中,则等效于char ** argv。 因此,该函数就像void ShowAllString(int argc,char ** argv)一样,以接收双指针作为参数。 因此将str作为参数是有意义的,因为str是数组char * str [3]的名称,而str是数组名称的双指针。 char * str [3]是一个应该包含三个指针元素的数组....但是为什么这样的字符串而不是地址值被放置在char * str [3]旁边...这就是我被困住的地方!
请帮我!
将数组名称作为参数传递时,它会衰减为指针。 在您的代码中,您有3个指针的数组。 因此,它衰减为指向指针的指针。
在C语言中, char[]
是指向char
数组存储位置的指针,在内存中一个接一个。 碰巧的是,这是存储字符串的好方法。 在您的代码中,您将创建一个由3个指针组成的数组,这些数组指向char
数组。 第一个str[0]
指向char
“ C编程”序列存储在内存中的位置,依此类推。
(在日常英语中,通常将“ char
的序列”称为“字符串”,但是从技术上讲,正如第一个注释正确指出的那样,这意味着char[]
从定义上必须表示字符串,而实际上并不是。)
您将指针传递给该函数的指针数组,然后该函数将检索到每个char
数组(“ strings”)的指针, printf
行将其用于获取字符串( char
数组)并打印它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.