小编Fab*_*ous的帖子

字符指针和printf函数

我试图学习指针,我写了下面的代码来打印指针的值:

#include <stdio.h>

    int main(void) {
        char *p = "abc";
        printf("%c",*p);
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出是:

一个

但是,如果我将上面的代码更改为:

#include <stdio.h>

int main(void) {
    char *p = "abc";
    printf(p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到输出:

ABC

我不明白以下两件事:

  1. 为什么printf在第二种情况下不需要格式说明符?是否printf(pointer_name)足以打印指针的值?

  2. 根据我的理解(这很少),*p指向包含的连续内存块abc.我预计两个输出都是相同的,即

ABC

由于印刷方式不同,是不同的产出?

编辑1

此外,以下代码会产生运行时错误.为什么这样?

 #include <stdio.h>

    int main(void) {
        char *p = "abc";
        printf(*p);
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c printf pointers

7
推荐指数
2
解决办法
4万
查看次数

单步执行指向字符串的指针 - "需要左值作为增量操作数"

我对这个程序很困惑,我将在这里说明.我写了两个简单的程序来打印字符串列表.首先,我创建了一个指向字符串的指针数组.这就是我尝试这样做的方式

#include <stdio.h>

int main()
{
    int i = 2;
    char *a[] = {"Hello", "World"};

    while (--i >= 0) {
        printf("%s\n", *a++); // error is here.
    }

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

我需要它打印

Hello
World
Run Code Online (Sandbox Code Playgroud)

但有编译错误,它说,

lvalue required as increment operand.
Run Code Online (Sandbox Code Playgroud)

然后我将程序更改为以下内容

#include <stdio.h>

void printout(char *a[], int n)
{
    while (n-- > 0)
        printf("%s\n", *a++);
}

int main()
{
    int i = 2;
    char *a[] = {"Hello", "World"};

    printout(a,i);
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

然后它按预期工作.

我的问题是,当我将数组名称传递给函数时会发生什么不同?为什么它不能第一次工作(我怀疑"数组名称不能修改"是原因但是为什么在第二个程序中,它允许我增加)?

c arrays lvalue

4
推荐指数
1
解决办法
73
查看次数

变量类型的初始化和更新

我知道静态变量只在程序的生命周期内初始化一次(参见此处参考).此外,静态变量在函数调用之间保持其值.然后如何修改静态变量?

例如,在以下代码段中如何修改"a":

#include <stdbool.h>

void foo(){
    static int a;
    printf("%d\n",a);
    a++;
    printf("%d\n",a);
}
int main()
{
foo();
foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

相反,如何修改非静态变量?更具体地说,如何在下面的代码中修改"a"?

 #include <stdbool.h>

void foo(){
    int a = 2;
    printf("%d\n",a);
    a++;
    printf("%d\n",a);
}
int main()
{
foo();
foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

c static

3
推荐指数
1
解决办法
106
查看次数

标签 统计

c ×3

arrays ×1

lvalue ×1

pointers ×1

printf ×1

static ×1