printf中*的作用

/*
*的作用是用后面的整数或变量代替原来应该出现在格式串中的数字。
如:
printf("a = %.*f", 4, 3.1415926535);

将输出3.1416

这是百度知道的结果
*/

#include<stdio.h>

int main(){

    int i,j,k;
   
    for(i=1; i<=5; i++)   
        printf("%*d\n",i,2);    //这里会跳过输出i的值而输出后面的2
       
    for(i=1,j=1; i<=5; i++,j++)   
        printf("%*.*d\n",i,j,2);    //同上,只不过第二个跳过的用0代替了
       
/*
    printf("%*d\n",2,2);
    printf("%*d\n",3,2);
    printf("%*d\n",4,2);
    printf("%*d\n",5,2);*/
   
}

还有网上的一种:

#include<stdio.h>
void main()
{
 int i=1;
 printf("##%*d\n",i,i);
 i++;
 printf("##%*d\n",i,i);
 i++;
 printf("##%*d\n",i,i);
}

输出:

##1
## 2
##  3


所以由此可以猜测*的作用是代替后面的变量值,比如int i=3;printf("%*d",i,i); 相当于 printf("%3d",i)这是对于一个*的结果。


### C语言中指针符 `*` 的作用与用途 在C语言中,`*` 符具有多种含义和用途,主要体现在以下几个方面: #### 1. **声明指针变量** `*` 可用于声明一个指针变量,表示该变量存储的是另一个变量的地址而非具体的数值。例如: ```c int *p; // 声明了一个指向整型数据的指针变量 p ``` 此处,`*` 表示 `p` 是一个指针变量,它可以保存一个整型变量的地址[^3]。 #### 2. **解引用操作符** 当应用于已经定义好的指针变量时,`*` 被称为解引用操作符(Dereference Operator)。它的功能是从指针所指向的内存位置获取实际的值。例如: ```c int x = 10; int *p = &x; // 将 x 的地址赋给指针 p printf("%d\n", *p); // 输出 x 的值,即 10 ``` 在这里,`*p` 返回了指针 `p` 所指向的位置上的值,也就是变量 `x` 的值[^5]。 #### 3. **函数返回类型修饰** `*` 还可以用来指定函数返回的结果是一个指针。比如下面的例子展示了如何创建一个返回指针的函数: ```c char *getString() { return "Hello, World!"; } int main() { char *str = getString(); printf("%s\n", str); return 0; } ``` 此例中,`getString()` 函数返回的是一个字符数组(字符串)的第一个元素的地址,因此其返回类型为 `char*`。 #### 4. **多重间接寻址支持** 除了单层指针外,还可以有双层甚至更多层次的指针。这时就需要多个 `*` 来处理不同级别的间接寻址。如下所示: ```c int x = 10; int *p = &x; // 单级指针 int **pp = &p; // 双级指针 printf("Value of x is %d\n", **pp); // 访问最底层的实际值 ``` 这段代码片段表明,通过双重解引 (`**`) 我们能够最终获得原始变量 `x` 的值[^1]。 #### 5. **无类型指针转换** 虽然严格意义上不属于标准用法的一部分,但在某些情况下可能会看到像这样的表达式——`(void*)pointer_expression` ,这实际上是把任何类型的指针强制转化为通用的 `(void*)` 形式以便于跨平台移植或者特殊需求下的灵活运用[^2]。 --- ### 示例综合代码 为了更好地理解以上概念,请看以下完整示例程序: ```c #include <stdio.h> // 定义一个简单的函数返回指针 double* getDoublePointer(double value){ static double result = 0.0f; result = value; return &result; } int main(){ int num = 42; int *ptrNum = &num; float fVal = 3.14F; float *fltPtr = &fVal; double dblRes = 98765.4321; double *dblPtr = getDoublePointer(dblRes); /* 显示各个指针对应的内容 */ printf("Integer Value via Pointer :%d\n", *ptrNum ); printf("Float Value via Pointer :%.2f\n", *fltPtr ); printf("Double Value from Function:%lf\n", *dblPtr ); return 0; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值