需要帮助来理解C中的main()函数吗
我正在学习C编程,不太了解下面的程序,需要一些帮助来理解 问题1:主功能参数中*argv前面的两个星号有什么作用。 问题2:在main()函数中,为什么void后面跟着一个星号?它有什么作用? 问题3:&retval有“&”,变量“retval”是否指向内存地址 谢谢你的帮助需要帮助来理解C中的main()函数吗,c,C,我正在学习C编程,不太了解下面的程序,需要一些帮助来理解 问题1:主功能参数中*argv前面的两个星号有什么作用。 问题2:在main()函数中,为什么void后面跟着一个星号?它有什么作用? 问题3:&retval有“&”,变量“retval”是否指向内存地址 谢谢你的帮助 /** Main */ int main(int argc, char **argv) { pthread_t thread; void* retval; pthread_create(&
/** Main */
int main(int argc, char **argv) {
pthread_t thread;
void* retval;
pthread_create(&thread, NULL, thread_proc, NULL);
printf("Hello from the main thread.\n");
pthread_join(thread, &retval);
printf("Done.\n");
return 0;
}
*
是标记指针的符号
您应该了解c
1) 通过
char**argv
,argv
被声明为指向的指针
2) 通过void*
,它意味着可以保存任何类型变量的地址的变量
3) 由于retval
是一个指针,它可以指向内存位置。通过&retval
可以获得名为retval
的变量的地址
&
称为运算符的地址。
*
是标记指针的符号
您应该了解c
中的指针
1) 通过char**argv
,argv
被声明为指向的指针
2) 通过void*
,它意味着可以保存任何类型变量的地址的变量
3) 由于retval
是一个指针,它可以指向内存位置。通过&retval
可以获得名为retval
的变量的地址
&
称为
运算符的地址。
*
在c中用于声明指针。指针是一个变量,它保存存储在计算机内存中的变量的位置(字面上是地址)
所以在你的问题中,void*retval代码>声明一个空指针。空指针是一种特殊类型的指针,可以指向任何数据类型的对象
char **argv
是指向char的指针。实际上,它是一个保存变量地址的变量,该变量是一个指针,c中的*
用于声明指针。指针是一个变量,它保存存储在计算机内存中的变量的位置(字面上是地址)
所以在你的问题中,void*retval代码>声明一个空指针。空指针是一种特殊类型的指针,可以指向任何数据类型的对象
char **argv
是指向char的指针。实际上,它是一个保存变量地址的变量,该变量是一个指针。char**argv
相当于char**argv
,大致意思是
一种内存地址值,当被访问时,它包含一个
访问时,包含包含第一个字符的内存地址值
C使用以null结尾的字符串,因此需要知道字符串结尾的是它开始的第一个内存地址。然后,其余例程搜索后续地址,查找空\0
字符
C还使用以null结尾的列表,因此需要知道列表结尾的是列表开始的第一个内存地址(假设您知道列表的大小)。在这种情况下,列表的大小为sizeof(*char)
,或者在英语中为“指向char的指针的大小”。其余的列表遍历例程随后搜索列表中的后续索引(后续内存偏移量),直到它被null字符终止
试着从右向左读,它读的是“指向字符指针的指针”,或者更简单地说是“字符串列表”。char**argv
相当于char**argv
,大致意思是
一种内存地址值,当被访问时,它包含一个
访问时,包含包含第一个字符的内存地址值
C使用以null结尾的字符串,因此需要知道字符串结尾的是它开始的第一个内存地址。然后,其余例程搜索后续地址,查找空\0
字符
C还使用以null结尾的列表,因此需要知道列表结尾的是列表开始的第一个内存地址(假设您知道列表的大小)。在这种情况下,列表的大小为sizeof(*char)
,或者在英语中为“指向char的指针的大小”。其余的列表遍历例程随后搜索列表中的后续索引(后续内存偏移量),直到它被null字符终止
试着从右向左读,它读的是“指向字符的指针”,或者更简单的说法是“字符串列表”。回答一:
char**argv表示您有一个二维char数组。
您可以这样访问它:
argv[0][2]
argv[0]
它给你一个字符。
但您可以这样访问:
argv[0][2]
argv[0]
谁给你一个字符*
在这里,“*”表示它是一个指针。
所以它不是直接在内存中的字符,而是一个包含字符地址的大小写。
有int*的事实;或字符*;或者任何东西,意味着你可能有一个数组
答复2:
空虚很简单。
你有一个指向某个你还不知道会是什么的东西的指针。
所以void*指针可以接受任何类型的值的地址,比如char、int或更复杂的类型,比如系统时间(这里是线程指针)
答复3:
“&”表示:取该字段的地址。
所以如果我有
int i = 5;
printf("%i", i);
printf("%i", &i);
第一次打印将显示int:here 5的值。
第二个将向您显示i的地址,这里类似于0x06528A7
“&”的事实是,您可以这样做:
int *ptr;
int i = 5;
ptr = &i;
您现在可以发送“int*ptr”或其他函数来修改它。
总的来说,这太过分了。
因为在修改“ptr”时,您修改的是“i”,而不是副本。
希望它能帮助你 答案