在C中传递char指针

在C中传递char指针,第1张

概述我正在学习C中的指针,所以我这样做是为了查看我在做某事时应该希望的输出.这里是: int characters(char temp[]){ printf("\nAddress of string by &temp: %p",&temp); printf("\nAddress of string by temp: %p",temp); printf("\nContent o 我正在学习C中的指针,所以我这样做是为了查看我在做某事时应该希望的输出.这里是:

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指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存