printf怎么输出? 如何正确使用%s,%c,%d,%p?=>这篇详解用法

本文详细解析了C语言中printf函数的使用方法,包括%d、%c、%s等格式符的应用场景,并通过具体示例展示了如何正确输出整数、字符及字符串。此外,还介绍了printf与数组、指针之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

printf怎么输出? 如何正确使用%s,%c,%d,%p?

回复评论

  1. printf(“%s”,&a[3])表示什么?
	char a[] = "Hello, world!";
    printf("%s",&a[3]);//输出lo, world!

答案: printf(“%s”, &a[3]) 表示从数组 a 的第四个元素开始打印字符串。&a[3] 是数组 a 中第一个字符的地址,表示字符串的起始位置。

  1. (void)printf(“%s”,ModulePrm[cModuleIndex].ModuleName);如果是输出这种是不是字符串?
#include <stdio.h>

typedef struct {
    char ModuleName[20];  // 字符串长度为 20
} Module;

int main() {
    Module ModulePrm[3] = {
        {"Module A"},
        {"Module B"},
        {"Module C"}
    };

    int cModuleIndex = 1;  // 选择第二个模块(Module B)

    (void)printf("%s\n", ModulePrm[cModuleIndex].ModuleName);//Module B

    return 0;
}

答案: 是的,printf(“%s”, ModulePrm[cModuleIndex].ModuleName); 也是输出字符串。这里 ModulePrm[cModuleIndex].ModuleName 应该是一个指向字符数组(字符串)的指针,printf 会从这个指针指向的位置开始打印字符,直到遇到字符串结束符 \0

正文

//printf怎么输出?
//=>如何正确使用%s,%c,%d,%p

%d试例

/* include<stdio.h>
int main(void) {
int a[36] = { 1,2,3,4,5 };
printf(“%d”, *a);//=>一个 =>*a是值
return 0;
}=>输出1
*/

%c试例

/* #include<stdio.h>
int main(void) {
char op[20] = { “123” };
char*p = op;
printf(“%c”, *op);//=>一个 =>*op是值
return 0;
}=>输出1
*/

%s试例

/* #include<stdio.h>
int main(void) {
char op[20] = { “123” };
char*p = op;
//op是指针(地址),*op是值,p是指针,*p是值
printf(“%s”, op);//=>一串 =>op是指针(地址)或者printf(“%s”,p);=>p是指针
return 0;
}=>输出123
*/

总结:
//用printf输出的话,
//如果是用 %d 的话,符号这个[“”,]后面要写 ;=>一个整数=>一个就是值
//如果是用 %c 的话,符号这个[“”,]后面要写;=>一个字符整数=>一个就是值
//如果是用 %s 的话,符号这个[“”,]后面要写地址=>一串字符串=>一串就是地址
> //即,单个就要放值,不少于一个(即一串)要放值
//究竟用printf输出,符号这个[“”,]后面是写值还是地址其实是就看要输出一串字符串,还是一个字符或整数
//补充:%p=>专门输入地址,用printf输出,符号这个[“”,]后面要写地址


printf与数组关系的使用

/* #include<stdio.h>
int main(void) {
int a[36] = { 1,2,3,4,5 };
printf(“%d”, a[0]);===>a[0]是值
return 0;
}//输出第一个元素的值1
*/

/* #include<stdio.h>
int main(void) {
int a[36] = { 1,2,3,4,5 };
printf(“%d”, a);====>a是地址
return 0;
}//出第一个元素的地址6487424
*/

/* #include<stdio.h>
int main(void) {
int a[36] = { 1,2,3,4,5 };
printf(“%d”, *a);====>*a是值
return 0;
}//输出第一个元素的值1
*/

由以上三个例子,我们看到,
对于同一个数组 int a[36] = { 1,2,3,4,5 };
a[0]代表的是第一个元素的值;
*a则代表的也是第一个元素的值;
而 a则代表的是第一个元素的地址;

由此,我们可以推出,
对一个数组,
int a[36] = { 1,2,3,4,5 };
a[i]表示值,即用printf输出时,是值;
*a[i]则表示地址,即用printf输出时,是地址;(当然还要额外定义一个指针,这里不要乱用,指针果然博大精深,还要在仔细地思考)
没写完,还在更新…

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏过山河,踏过海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值