c/c++语言开发共享将字符串文字作为定义为指针的函数参数传递

我正在阅读Kernighan和Richie的C编程语言中有关数组和指针的章节。

他们给出了一个例子:

/* strlen:  return length of string s */ int strlen(char *s) {     int n;     for (n = 0; *s != ''; s++)         n++;     return n; } 

然后说:

“由于s是一个指针,递增它是完全合法的; s++对调用strlen的函数中的字符串没有影响,只是增加了strlen指针的私有副本。 这意味着像这样的电话

 strlen("hello, world");  /* string constant */ strlen(array);           /* char array[100]; */ strlen(ptr);             /* char *ptr; */ 

所有的工作。“

除了第一个调用示例之外,我觉得我理解所有这些:为什么或如何将字符串文字"hello, world"视为char *s ? 这怎么指针? 函数是否将此字符串文字指定为其局部变量*s的值,然后使用s作为数组名称/指针?

    要理解像“Hello World”这样的字符串是如何转换为指针的,重要的是要理解,字符串实际上是从地址开始并一直移动直到找到NULLhex数据

    这意味着,每个字符串常量(如“Hello World”)都存储在某个内存中

    可能性是:

     0x10203040 : 0x48 [H] 0x10203041 : 0x65 [e] 0x10203042 : 0x6C [l] 0x10203043 : 0x6C [l] 0x10203044 : 0x6F [o] 0x10203045 : 0x20 [' '] 0x10203046 : 0x57 [W] 0x10203047 : 0x6F [o] 0x10203048 : 0x72 [r] 0x10203049 : 0x6C [l] 0x1020304A : 0x64 [d] 0x1020304B : 0x00 [] 

    因此,当在内存中使用上述值调用此函数时,[左侧是地址后跟’:’,右侧是字符的ascii值]

     int strlen(const char *s) { int n; for (n = 0; *s != ′′; s++) n++; return n; } strlen("Hello World"); 

    那时,传递给strlen是值0x10203040 ,它是字符数组的第一个元素的地址。

    注意,地址是按值传递的。因此, strlen有自己的“Hello World”地址副本。 从n = 0 ,在uptil之后我在内存中找到 ,我递增ns的地址(然后递增到0x10203041 )依此类推,直到它在地址0x1020304B找到并返回字符串长度。

    "hello, world"

    是一个char数组(type是char[13] )。 表达式中char数组的值是指向char的指针。 指针指向数组的第一个元素(即"hello, world"的值是&"hello, world"[0] )。

    注意:

    因此,指针可以很容易地简单地指向静态字符串,以及存储在内存中的任何其他(动态)结构(如字符数组)。 与其他提供的示例实际上没有区别。

    函数是否将此字符串文字指定为其局部变量* s的值,然后使用s作为数组名称/指针?

    需要了解更多c/c++开发分享将字符串文字作为定义为指针的函数参数传递,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享将字符串文字作为定义为指针的函数参数传递相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980185.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐