程序为
void main()
{
char *name[]={"-s","3","heart_scale","model_1"};
int f_main( 4, **name);
}
另外问一下 char *name[] 和 char **name 区别
问题在于每个字符应该用单引号。字符是指一个符号,例如‘1’,‘@’,‘=’等都是字符。而字符串是多个字符组成的串 例如“1@=”。定义的时候字符需要用单引号,字符串需要用双引号。
用单引号引起的第一个字符实际上代表一个整形数,整数值对应于该字符在编译器采用的字符集中的序列值。 因此,对于采用ASCII字符集的编译器而言,'a'的含义与十进制的97严格一致。
用双引号引起的字符串,代表的却是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制为0的字符'\0'初始化。
扩展资料
在定义一个“字符”的时候,定界符要写成单引号。在屏幕上打印一个字符的时候,需要在printf函数中,使用“%c”这个占位符。在屏幕上要打印一个字符串的时候,在printf函数中,使用的是“%s”这个占位符。与“字符”的“%c”这个占位符是不同的。
字符”占据一个字节,但是“字符串”是占据多个字节。而且,在“字符串”的结尾处,自动被编译器加上了'\0'这个字符,在ASCII码中,'\0'表示的是一个空字符。
如果在定义一个字符串常量的时候,使用了单引号,程序就会报错。在定义字符串的时候,需要在变量名后面加上“中括号”,类似于定义“数组”时候的格式。
你好,那我想实现给**name初始化 该如何实现, **name 第一个指针指向
“-s",第二个指针指向"3",第三个指针指向"heart_scale",第四个指针指向"model_1"};
首先明确一点,对于char *name1[]与char **name2,name1[x]与name2类型是不一样的,而name1与name2类型一样。(数组名是指向数组元素的指针)
name2必须指向一个指针,例如name2=name1,或者name2=&name1[0]。
其次,你要指向name1[x]本身(数组中的元素是指针),还是要指向name1[x]所指向的字符本身?char **name2只能指向指针,例如:name2=&name1[0](等同于name2=name1),此时*name2为name1[0]这个元素,也是指针,而**name2才是字符'-'。此时*(name2+x)即name1[x]。
再次,name2是一个变量,同时只能指向一个东西,要指向不同的,你得声明数组。
那为何 char **name={"-s","3","heart_scale","model_1"};
这样初始化会出错呢
这样虽然不太好,但还是可以运行的,不信你试试。
追问不能运行,出现如下错误
D:\C++____libsvm-3.1\shiyan2\main.cpp(15) : error C2440: 'initializing' : cannot convert from 'char [3]' to 'char ** '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
你说的这个错误根本不在你给出的这段代码里面。。
错误提示是说你把一维数组当做二维数组来使用了。