int characters(char temp[]){ printf("\nAddress of string by &temp: %p",&temp); printf("\nAddress of string by temp: %p",temp); printf("\nContent of string: %s",temp); return 0;}int main(){ char s[] = "Prafulla Shahi"; char *t=s; clrscr(); characters(t); printf("\nMain\nAddress of string by &s: %p",&s); printf("\nAddress of string by s: %p",s); printf("\nContent of string: %s",s); printf("\nAddress of pointer by &t: %p",&t); printf("\nAddress of pointer by t: %p",t); printf("\nContent of pointer: %s",t); getch(); return(0);}
我得到的输出是这样的:
Address of string by &temp: 0x7fff4ab45788Address of string by temp: 0x7fff4ab457b0Content of string: Prafulla Shahi MainAddress of string by &s: 0x7fff4ab457b0Address of string by s: 0x7fff4ab457b0Content of string: Prafulla ShahiAddress of pointer by &t: 0x7fff4ab457a8Address of pointer by t: 0x7fff4ab457b0Content of pointer: Prafulla Shahi
我的问题是:
当temp&temp和temp询问时,临时数组的地址显示两个不同的值?
我的理解是,temp是一个数组变量,但它有自己的地址(与指针t类似的行为.为什么它的行为不像通常的变量数组?). main()中的数组s []也是一个数组,但是当& s和s调用时,它的地址显示相同的值.
有人可以解释一下吗?
解决方法char s[] = "Hello world";
s是一个数组对象(用字符串文字初始化).数组的地址和数组的第一个元素的地址是相同的(只有类型不同).
所以:
(char *) &s == s /* value of the == Expression is 1 */
但:
char *p = "Hello world";
p是指针对象(指向字符串文字). p的地址是指针对象的地址,该地址不同于p的值,p是指向“Hello world”字符串的第一个字符的指针.
所以:
(char *) &p == p /* value of the == Expression is 0 */
为了完整回到您的示例,我还必须补充说,函数声明中的数组参数在C中调整为指针类型的参数.所以这两个函数声明是等价的:
int characters(char temp[]) { /* ... */ }
和
int characters(char *temp) { /* ... */ }
这也意味着内部字符功能,我们有:
(char *) &temp == temp /* value of the == Expression is 0 */
因为temp是指针对象而不是数组对象.
总结以上是内存溢出为你收集整理的在C中传递char指针全部内容,希望文章能够帮你解决在C中传递char指针所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)