字符串不就是数组吗?为什么结果会不一样?
本帖最后由 Cool_Breeze 于 2020-3-10 13:36 编辑#include <stdio.h>
int main(void)
{
char *a={"AAA","AAA"};
char *b={{'\0','A','A','\0'},{'\0','A','A','\0'}};
char d[]={'A','A','A','\0'};
char e[]={'A','A','A','\0'};
char *c={d,e};
printf("a=%s\n",*a);
printf("b=%s\n",*b);
printf("c=%s\n",*c);
#if 0
有没有看出什么来?
#endif
return 0;
}
a=AAA
b=(null)
c=AAA
--------------------------------
Process exited after 0.02926 seconds with return value 0
请按任意键继续. . .
你把*号去掉试试 qiuyouzhi 发表于 2020-3-9 10:59
你把*号去掉试试
能告诉我原理吗?为什么这么写结果不一样?{:10_254:} 非常爱学习 发表于 2020-3-9 11:01
能告诉我原理吗?为什么这么写结果不一样?
要么用指针,要么用数组 qiuyouzhi 发表于 2020-3-9 11:02
要么用指针,要么用数组
“AAA”和{'A','A','A','\0'}是相等的吧?
*a和*b输出的都应该是AAA吧? 非常爱学习 发表于 2020-3-9 11:07
“AAA”和{'A','A','A','\0'}是相等的吧?
*a和*b输出的都应该是AAA吧?
指针不会自动添加'\0',而数组可以,
如果*b是{'A', 'A', 'A', '\0'},那么它可以正常输出,
而*a无法正常输出,可能会有乱码 qiuyouzhi 发表于 2020-3-9 11:09
指针不会自动添加'\0',而数组可以,
如果*b是{'A', 'A', 'A', '\0'},那么它可以正常输出,
而*a无法正 ...
*a能输出AAA,*b不能正常输出
好晕{:10_269:} 非常爱学习 发表于 2020-3-9 11:28
*a能输出AAA,*b不能正常输出
好晕
你把*b改成这样:
*b = {'A', 'A', 'A', '\0'} qiuyouzhi 发表于 2020-3-9 11:34
你把*b改成这样:
这个我明白
想不通char *b = {{'A','A','A','\0'},{'A','A','A','\0'}}
这个指针数组到底有啥问题,里面明明是两个常量指针{:10_285:}
这不就跟char *a = {"AAA", "AAA"}相等吗? 非常爱学习 发表于 2020-3-9 11:52
这个我明白
想不通char *b = {{'A','A','A','\0'},{'A','A','A','\0'}}
这个指针数组到底有啥问题, ...
指针不会自动加入'\0' qiuyouzhi 发表于 2020-3-9 11:57
指针不会自动加入'\0'
可我自己加了‘\0' 非常爱学习 发表于 2020-3-9 11:58
可我自己加了‘\0'
所以第二个就运行不了啊 qiuyouzhi 发表于 2020-3-9 12:00
所以第二个就运行不了啊
??
非常爱学习 发表于 2020-3-9 12:16
??
发错帖子了,我待会删掉{:10_250:}
第一个有两个大括号,编译器就认为这是一个二维数组
非常爱学习 发表于 2020-3-9 12:16
??
发错帖子了,我待会删掉{:10_250:}
第一个有两个大括号,编译器就认为这是一个二维数组
b
你觉得里面保存的都是字符串,你理解的概念是错误的,字符串数组和二维数组搞混了。
学习不要钻牛角尖,按照正常思路进行下去就行了 "AAA"
{'A', 'A', '\0'}
这是两个完全不同的东西 Cool_Breeze 发表于 2020-3-10 13:18
这是什么原理?? 引用C语言参考手册的一句话(一般而言,指针类型的初始值的结果必须是一个转换为指针类型的整数,或者是一个地址加上或减去一个整数常量的结果。这个限制反映了大多数链接器的功能)
举个小列子char *p = (char *)123456789
指针变量和数组名很像,但是他们只是哥俩好!
指针变量只能存放一个地址{'A','A','A','\0'}编译器不会认为是一个字符串的地址,(通过上面结论只是把第一个字符常量的地址赋予了指针变量)
数组名{'A','A','A','\0'}相对于给指定元素赋值
字符串(数组)会储存在连续的内存空间中!
其实我感觉我解释的也不清楚!我也是学了几个月!只会一些语法!
页:
[1]
2