Difference between char a[]=“string”; char *p=“string”;
Possible Duplicates:
What is the difference between char s[] and char *s in C?
第一个是数组,另一个是指针。
数组声明"
陈述
1 2 | char a[] ="hello"; char *p ="world"; |
会产生这样的数据结构:
1 2 3 4 5 6 | +---+---+---+---+---+---+ a: | h | e | l | l | o |\0 | +---+---+---+---+---+---+ +-----+ +---+---+---+---+---+---+ p: | *======> | w | o | r | l | d |\0 | +-----+ +---+---+---+---+---+---+ |
重要的是要认识到,像x[3]这样的引用根据x是数组还是指针生成不同的代码。给定上面的声明,当编译器看到表达式A[3]时,它会发出代码从位置"A"开始,移动三个字符,并从中提取字符。当它看到表达式p[3]时,它发出代码从位置"p"开始,在那里获取指针值,在指针上添加三个,最后获取指向的字符。在上面的示例中,a[3]和p[3]恰好是字符"l",但编译器得到的结果不同。
你可以使用搜索,在互联网上有很多关于这个主题的解释。
没有区别。除非你真的想写数组,在这种情况下,如果你尝试使用第二种形式,整个世界都会爆炸。请看这里。
第一个声明声明声明数组,第二个声明声明声明指针。
如果您对某些特定方面的差异感兴趣,请澄清您的问题。
一个区别是,sizeof(a)-1将在编译时替换为字符串的长度。使用p时,需要使用strlen(p)来获取运行时的长度。还有一些编译器不喜欢char*p="string",它们需要const char*p="string",在这种情况下,"string"的内存是只读的,而a的内存不是。即使编译器不需要const声明,修改p(即*p='a')指向的字符串也是一种糟糕的做法。指针P可以更改为指向其他对象。对于数组A,必须将新值复制到数组中(如果适合的话)。