新手关于char的提问解决方法

新手关于char的提问
最近研究字符串的用法,有2个写法
1,char str[100];
2,char *str;


根据我的理解,一般用第一种,是纯字符串的写法,如果写第2种的话,会带有指针,现在问题来了,
有个main函数
main( int argc,char *argv[] )

由于argv是指针数组,
而我函数里面有个char str[100]的变量

如果我直接写成
str=argv[2];

这样写肯定是不对的,但如果我想把那个参数传给str,那应该怎么办好呢?是不是要通过什么函数去转换的呢?
求教各位大虾,
另外我看到有个atoi的函数,是不是c语言里面也有另一些函数,是这样转换字符串的呢?这个迷,希望得到各位的解答,万分感谢!

------解决方案--------------------
首先认清这几个数据类型 
char str[100]是一个数组,数组的地址就是一个指针,所以传参的时候数组可以用于指针类型的参数,char *str直接就是个指针不需要多说,
char *argv[] 是一个指针数组,不管argv[0]还是argv[1]里面存的都是一个指针,而且argv本身也是一个指针。
str=argv[2]这种写法是不对的,因为前面一个是变量,后面一个是指针,你必须取变量的地址,变量的地址就是一个指针,所以必须写成&str=argv[2];

------解决方案--------------------
首先要知道指针和数组的区别,
1.char str[100]="hello,world";是分配一个局部数组,局部数组是局部变量,它对应的是内存中的栈;
2.char *str="hello,world";是分配一个全局变量,它对应着内存中的全局区域。
main( int argc,char *argv[] )由于argv是指针数组,也就是说argv数组里面存放的是指针;
str=argv[2];这句话是错误的,应为等号左边是数组名,它对应着一块内存,等号右边是指针,指针是指向内存的。所以要在str前面取地址。用&str=argv[2];
虽然当作为函数参数的时候数组也可以当做指针用,其本质是取数组第一个元素的内存地址传过去。但是这里并没有作为参数。
以上是自己的理解,可能有所偏差,还望各位大侠多多指教。