gpt4 book ai didi

函数参数中的字符数组作为指针还是数组?

转载 作者:行者123 更新时间:2023-11-30 21:42:34 24 4
gpt4 key购买 nike

#include<stdio.h>

int strlen1(char *s){

char *p=s;
printf("%s\n",s);

printf("size of s=%d\n",sizeof(s));

while(*p!='\0')

p++;

return p-s;

}

int main(){

int len;
char c[]="welcome back ";
len=strlen1(c);
printf("%d",len);
return 0;

}

在这段代码中,char数组作为函数strlen()的参数传递,其中s是一个指针(数组c的第一个元素的地址)那么为什么它打印整个数组并且它的大小只有8。并且还分配char指针 p as s 不会引用它的地址,而是引用它的值。请澄清我对整个代码的概念和基础知识。提前致谢。

最佳答案

assigning char pointer p as s will not reference its address rather its value

当您将 s 分配给 p 时,您实际上是在分配地址。
如果您只想分配值,那么您需要执行以下操作:

char p; //create a char called p
p = *s; //value at p = value at s

但是您无法使用 p 扫描 while 循环中的数组。

<小时/>

why it prints the whole array

%s 表示继续打印,直到看到空字符。因此,因为 p 指向字符串的第一个地址,所以它会打印整个内容。

<小时/>

its size is only 8

sizeof(s) 表示变量 s 的大小是多少。您将 s 定义为 char 指针,因此它返回大小或 char 指针 (8)。您想要的功能是:

strlen(s);  
<小时/>

编辑:修复了第一个示例以删除未定义的行为。

关于函数参数中的字符数组作为指针还是数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38877960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com