如何使用指针在C中重用Array变量

时间:2014-01-19 20:09:22

标签: c++ c coding-style programming-languages

我需要回答这个问题来测试这个:

  

练习19-16:修复示例中的代码,以便在while循环运行之前保存样本变量的值,然后再恢复。在while循环执行完毕后,在代码中添加puts(sample)语句,以证明变量的原始地址已恢复。

**Example:**
     #include <stdio.h>

    int main()
    {
        char *sample = "From whence cometh my help?\n";

        while(putchar(*sample++))
            ;
        return(0);
    }

我想检查一下我的答案是否正确,可能是您可以给出解释,因为我对指针和变量没有清楚的了解。 这是我的答案:

     #include <stdio.h>

        int main()
        {
            char *sample = "From whence cometh my help?\n"; //This is my string
            char StringSample[31];
            int index = 0;

            while(sample[index] != '\0') //while the char is NOT equal to empty char (the last one)
            {
                index++; //increase the index by 1
                StringSample[index] = sample[index]; //put the char "n" inside the stringSample //
                putchar(*sample++);  //write it to the screen
            }
            putchar('\n'); //A new line

            //to put the entire string on screen again
            for (index=0; index<60; index++)
            {
                putchar(StringSample[index]); 
            }
            return(0);
        }

这是我的输出:

enter image description here

我不知道为什么将字符串拆分为From whence co以及为什么文本的其余部分(正如您所见)没有任何意义。

我正在使用Xcode 5.02

3 个答案:

答案 0 :(得分:2)

问题是您尝试将sample变量引用为索引以及指针。这会导致错误的结果。

while(sample[index] != '\0')   
{
    index++;
    StringSample[index] = sample[index];  // indexed access
    putchar(*sample++);                   // incrementing pointer sample. 
}   

您可以简单地实现目标

#include <stdio.h>

int main()
{
    char *sample = "From whence cometh my help?\n";
    char *ptr = sample;  // Saving the value of sample

     while(putchar(*sample++))
        ;
    putchar('\n');

    sample = ptr;        // Restoring sample's value.
    puts(sample);

    return(0);
}  

答案 1 :(得分:1)

char StringSample[31];
....
for (index=0; index<60; index++)
{
    putchar(StringSample[index]);
}

你的阵列有31个单元,但是你可以远程迭代到60.上帝知道你可以访问什么。

答案 2 :(得分:1)

你使这种方式变得更加复杂。只需将指针保存在另一个变量中,并在完成后将其复制回来。

 #include <stdio.h>

int main()
{
    char *sample = "From whence cometh my help?\n";
    char *temp = sample;

    while(putchar(*sample++))
        ;

    sample = temp;
    puts(sample);
    return(0);
}

输出:

From whence cometh my help?
From whence cometh my help?