指针变量的定义与引用

void main()
{
    int a =5,b=3;
    int *p;
    p = &a;
    b=*P+5;
    printf("%d\n", b);
    *p = 4;
    printf("%d,%d\n",a,*p);
}

输出结果:10     4     4

之前在学校的时候就没怎么搞懂, 现在再重新学习一下,发现竟然很容易。
#include <stdio.h>
void main(){
    int a,b,c;
    int *pa,*pb,*pc;
    pa = &a,pv=&b,pc=&c;
    scanf("%d%d",pa,pb);
    printf("a=%d,b=%d\n",*pa,*pb);
    c=a+b;                 printf("c=%d\n",*pc);                                    
    *pc=a+*pb;            printf("c=%d\n",c);
    c=*pa**pb;            printf("c=%d\n",c);
    c=++*pa+(*pb)++;    printf("c=%d\n",c);
    c=(*pa)+++*pb;        printf("c=%d\n",c);
                                    printf("a=%d,b=%d\n",a,b);
}

结果:  2  3
        a=2,b=3
        c=5
        c=5
        c=6
        c=6
        c=7
        a=4,b=4

转载于:https://my.oschina.net/shunshun/blog/118297

<think>嗯,用户想学习C/C++中指针变量定义引用使用教程。首先,我需要整理指针的基础知识,确保涵盖定义、初始化、引用和解引用这些基本概念。根据提供的引用资料,特别是引用[1]和[4],指针定义涉及声明语法,比如int *ptr;,这里需要说明指针变量存储的是内存地址,而不是直接的值。 接下来,用户可能需要了解如何正确使用指针,比如通过取地址运算符&获取变量的地址,并将其赋值给指针引用[4]中的例子展示了如何通过函数参数传递指针来修改主函数中的变量,这可以作为一个很好的例子说明指针的实际应用。 然后是关于指针的解引用,即通过*操作符访问或修改指针指向的值。这部分需要详细说明,避免用户混淆指针本身和指针指向的数据。此外,动态内存分配也是指针的重要应用,比如使用malloc或new来分配内存,并记得释放,防止内存泄漏。 引用中提到的指针数组、函数的关系也需要涵盖。例如,指针可以遍历数组,数组名本身可以视为指针常量。函数指针指针作为函数参数的例子能帮助用户理解更复杂的用法。 用户可能对const指针和void指针有疑问,需要解释const int *ptr、int *const ptr以及const int *const ptr的区别,说明它们的用途和限制。void指针作为通用类型指针,可以指向任何数据类型,但使用时需要类型转换。 还要注意常见错误,比如野指针和内存泄漏,这部分可以结合引用中的注意事项,提醒用户初始化指针和正确释放内存的重要性。此外,指针运算如加减操作,适用于数组遍历,但需注意越界问题。 最后,确保结构清晰,分步骤讲解,每个部分配合代码示例,如引用中的代码片段,帮助用户更好地理解。同时,生成相关问题时要覆盖指针的不同方面,如动态内存、函数指针、const修饰符等,以促进用户深入学习和实践。</think>### C/C++ 指针变量定义使用教程 --- #### 一、指针定义初始化 1. **基本语法** 指针变量存储内存地址,定义格式为:`数据类型 *指针变量名;` 例如: ```c int *ptr; // 指向整数的指针 char *str; // 指向字符的指针(常用于字符串) float *fptr; // 指向浮点数的指针 ``` 2. **初始化** 指针必须指向有效地址后才能使用: ```c int num = 10; int *ptr = &num; // 将ptr初始化为num的地址 ``` --- #### 二、指针引用引用 1. **取地址运算符 `&`** 获取变量的内存地址: ```c int a = 5; ptr = &a; // ptr存储a的地址 ``` 2. **解引用运算符 `*`** 通过指针访问或修改目标数据: ```c *ptr = 20; // 修改a的值为20 printf("%d", *ptr); // 输出20 ``` --- #### 三、指针的典型应用 1. **函数参数传递** 通过指针修改外部变量(示例参考引用[4]): ```c void modify(int *p, int *q) { *p = 100; // 修改主函数中的变量a *q = 200; // 修改主函数中的变量b } int main() { int a = 1, b = 2; modify(&a, &b); // 传递地址 printf("%d, %d", a, b); // 输出100, 200 return 0; } ``` 2. **动态内存分配** 使用`malloc`或`new`分配堆内存: ```c int *arr = (int*)malloc(5 * sizeof(int)); // C语言 int *arr = new int[5]; // C++ free(arr); // C语言释放内存 delete[] arr;// C++释放内存 ``` --- #### 四、特殊指针类型 1. **`const`指针** - 常量指针(指向不可修改):`const int *ptr;` - 指针常量(指针不可修改):`int *const ptr = &a;` - 双重常量:`const int *const ptr = &a;` [^3] 2. **`void`指针(万能指针)** 可指向任意数据类型,但使用时需显式类型转换: ```c void *vp; int num = 10; vp = &num; printf("%d", *(int*)vp); // 强制转换为int*后解引用 ``` --- #### 五、注意事项 1. **野指针问题** 未初始化的指针可能指向无效地址,引发崩溃: ```c int *ptr; // 错误!未初始化 *ptr = 5; // 未定义行为 ``` 2. **内存泄漏** 动态分配的内存必须手动释放,否则导致内存泄漏。 --- #### 六、指针数组/函数的关系 1. **指针遍历数组** ```c int arr[5] = {1,2,3,4,5}; int *p = arr; for (int i=0; i<5; i++) { printf("%d ", *(p+i)); // 输出1 2 3 4 5 } ``` 2. **函数指针** 定义指向函数的指针: ```c int add(int a, int b) { return a+b; } int (*func_ptr)(int, int) = add; // 函数指针 printf("%d", func_ptr(3,5)); // 输出8 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值