免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3902 | 回复: 1
打印 上一主题 下一主题

请教高手,输入缓冲区与指针问题. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-14 17:47 |显示全部楼层 |倒序浏览
在带形参的main 函数中: 命令行输入缓冲区中的字符串是如何传递给 char **s 的,字符串个数是如何传递给int n的
请高手指点:指向指针的指针变量,与指针数组,有哪些共同点,和区别?
我知道,指针数组名是地址常量,为每个指针元素各开辟4字节的内存空间;**s只有4字节的内存空间它可以存放一个指针变量本身的地址.

在C中:
#include <stdio.h>

int main(int n, char **s)
{
     int i=0;
     printf ("%d",n);

    while (i<n)
         printf ("%s\n",s[i++]);
     return 0;
}

如有命令行: main one two three
1.形参int n 是如何获得4;
2.而**s 的值又是什么? 使s[i++]能指向命行缓冲区中的各字符串.
3.这些缓冲区中的字符是怎么变成字符串的.

论坛徽章:
0
2 [报告]
发表于 2012-04-15 18:28 |显示全部楼层
本帖最后由 huangzhenfan 于 2012-04-15 18:31 编辑

getchar() 初步模似 main函数形参


#include <stdio.h>
#include <ctype.h>

int main (void)
{
    int m=0,n=0,i=0,flag=0;
    char array[20][20],c,**p;

    while ((c=getchar())!='\n')
    {
        if (!isspace(c))
        {
            if (flag)
            {
                array[m][n]='\0';
                m++;
                n=0;
            }
            array[m][n++]=c;
            flag=0;
        }
        else if (n>0)
            flag=1;
    }
    array[m][n]='\0';
    int *s[m]; /* 动态指针数组 */
    p=s; /* "指针数组s"和"指向指针的指针变量p" 是兼容的,因为他们都指向指针变量的地址,即指向的对象大小是一致的 */

    printf ("字符串个数:%d\n",m+1);
    while (i<=m)
    {
        s[ i ]=array[ i ];  /* array 与 s不兼容,但array[0]与s[0]是兼容的,因为它们指向的对象大小是一致的*/
        /* 指针数组s保证了每个元素的值与array元素值是相同的.虽然他们元素本身地址不同 */

        printf ("字符串[%d]:%s\n",i,p[ i ]);  /* 指向指针的指针变量p保证了他的值,与s的值(即元素的地址)相同 */
        ++i;
    }

    return 0;
}

array[20][20] 模拟输入缓冲区,* s[m]模拟缓冲区数据结构(字符串),m和**p 模拟main 形参

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP