You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何通过指针修改变量值?指针使用问题求助

C语言指针使用问题排查

问题描述

首次尝试在C语言中使用指针,目标是声明、初始化指针并通过指针修改变量i、f、c的值,但运行代码后遇到三个问题:

  • int类型变量的地址不是十六进制格式,且每次运行地址变化
  • char类型指针的地址无法显示
  • 修改指针相关操作后,指向的变量值并未改变

原代码

int i = 5;
float f = 7.77;
char c = 'a';
int iNumber = 2;
float fNumber = 5.55;
char cCharacter = 'c';
int *iPtr;
float *fPtr;
char *cPtr;
iPtr = &i;
fPtr = &f;
cPtr = &c;

 printf("\nThe current values are:  ");
 printf("%d %f %c", i, f, c);
 printf("\nThe addresses of each pointer are: ");
 printf("%d %f %c", iPtr, fPtr, cPtr);

iNumber = *iPtr;
fNumber = *fPtr;
cCharacter = *cPtr;

printf("\nThe modified values are:  ");
printf("%d %f %c", i, f, c);
printf("\nThe addresses of each pointer are: ");
printf("%d %f %c", iPtr, fPtr, cPtr);
return 0;

问题原因与修复方案

1. 指针地址打印格式错误,char指针无法显示

C语言中打印指针地址必须用%p格式符,你用的%d、%f、%c都是不匹配的格式符,属于未定义行为,直接导致输出异常:

  • %d打印十进制整数,指针地址本质是十六进制内存地址,用它会显示十进制数值;而地址每次运行变化是正常现象——现代操作系统的ASLR(地址空间布局随机化)机制会随机分配内存地址,用于防范恶意攻击。
  • %c用于打印字符,char指针是内存地址,用它会把地址对应的ASCII码转成字符,自然无法显示正确地址。

修复方式:把打印指针的格式符全部换成%p,且按标准要求将指针强制转为void*类型:

printf("\nThe addresses of each pointer are: ");
printf("%p %p %p", (void*)iPtr, (void*)fPtr, (void*)cPtr);

2. 未通过指针修改目标变量的值

你的代码中iNumber = *iPtr;这类操作,是把指针指向的变量值赋值给另一个变量,完全没有修改原变量i、f、c的值。要修改原变量,必须用*指针 = 新值的写法:

比如要把i改成10,f改成9.99,c改成'b',代码应写为:

*iPtr = 10;    // 修改i的值
*fPtr = 9.99;  // 修改f的值
*cPtr = 'b';   // 修改c的值

修复后的完整代码

#include <stdio.h>

int main() {
    int i = 5;
    float f = 7.77;
    char c = 'a';
    int *iPtr = &i;
    float *fPtr = &f;
    char *cPtr = &c;

    printf("\nThe current values are:  ");
    printf("%d %.2f %c", i, f, c);
    printf("\nThe addresses of each pointer are: ");
    printf("%p %p %p", (void*)iPtr, (void*)fPtr, (void*)cPtr);

    // 通过指针修改原变量的值
    *iPtr = 10;
    *fPtr = 9.99;
    *cPtr = 'b';

    printf("\nThe modified values are:  ");
    printf("%d %.2f %c", i, f, c);
    printf("\nThe addresses of each pointer are: ");
    printf("%p %p %p", (void*)iPtr, (void*)fPtr, (void*)cPtr);

    return 0;
}

内容的提问来源于stack exchange,提问作者c_and_me1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:05:18