求助一个关于C语言的基础知识,指针的
定义a是一个字符串数组,然后char*p=a+1;和charp;p=a+1;,这两个都成立,第二个我能理解,问题是第一个,a的话不是第一个元素的地址么,为什么取值了之后是...
定义a是一个字符串数组,然后char *p=a+1; 和 char p; p=a+1;,这两个都成立,第二个我能理解,问题是第一个,a的话不是第一个元素的地址么,为什么取值了之后是地址?
展开
3个回答
展开全部
你的说法有错误。看例子吧。char * a[]={"china", "usa", "russia"};
C语言没有字符串类型。a是一个字符指针数组。把3个字符串放到常量区,返回它们的地址,放到数组中。数组名被编译成指向首元素的地址常量。
a指向元素a[0]。而a[0]是char *型的,所以a是char **型的。相似地,命令行参数argv常常被写成char * argv[],当然也可以写成char * * argv。(数组名作为形参,其实是指针变量。argv的值可以改变,当然这一般没有意义,除了你想抛掉argv[0]那个程序名参数。)
由于a代表了数组,所以&a的类型是char * (*)[3]型。这种类型是指向数组的指针,指向的数组中应该有3个元素,每个元素又是char *型。
至于char * p = a+1; 和 char p; p=a+1;
等号左右两边类型肯定不匹配,编译时会有警告。也许你是写错了。
也许你说的a,是字符数组,而非字符串的数组。
char a[]={"china"};
那么char * p = a+1;是对的。a是char *型。指向首元素'c'。
char p; p=a+1;是错的。等号两边类型不一致。警告而已,毕竟字符和地址都是数值。
C语言没有字符串类型。a是一个字符指针数组。把3个字符串放到常量区,返回它们的地址,放到数组中。数组名被编译成指向首元素的地址常量。
a指向元素a[0]。而a[0]是char *型的,所以a是char **型的。相似地,命令行参数argv常常被写成char * argv[],当然也可以写成char * * argv。(数组名作为形参,其实是指针变量。argv的值可以改变,当然这一般没有意义,除了你想抛掉argv[0]那个程序名参数。)
由于a代表了数组,所以&a的类型是char * (*)[3]型。这种类型是指向数组的指针,指向的数组中应该有3个元素,每个元素又是char *型。
至于char * p = a+1; 和 char p; p=a+1;
等号左右两边类型肯定不匹配,编译时会有警告。也许你是写错了。
也许你说的a,是字符数组,而非字符串的数组。
char a[]={"china"};
那么char * p = a+1;是对的。a是char *型。指向首元素'c'。
char p; p=a+1;是错的。等号两边类型不一致。警告而已,毕竟字符和地址都是数值。
展开全部
第二个是错误的呀
第一个才正确
正如你所说的, a是第一个元素的地址, 但你要问为什么
因为书上有这么一句话, 这也就是传说中的规定
a+1 是第二个元素的地址 所以因该由 char* 来接其值
第一个才正确
正如你所说的, a是第一个元素的地址, 但你要问为什么
因为书上有这么一句话, 这也就是传说中的规定
a+1 是第二个元素的地址 所以因该由 char* 来接其值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a是第一个元素的地址
&a是整个数组的地址 虽然是一样的 意思不一样
&a是整个数组的地址 虽然是一样的 意思不一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询