指针必须初始化才能使用
来源:互联网 发布:重庆公路网络教育平台 编辑:程序博客网 时间:2024/05/17 20:29
//指针变量说明中,"*"是类型说明符,表示其后的变量是指针类型。而表达式中出现的"*"则是一个运算符用来表示指针变量所指的变量。
//下面的语句会出现“ The variable 'temp' is being used without being initialized."的错误;
//这说明指针必须要先初始化才可以使用,比如pointer_1和pointer_2
#include "stdio.h"void swap(int *p1, int *p2){int *temp;*temp=*p1;*p1=*p2;*p2=*temp;}void main(){int a,b;int *pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if (a<b)swap(pointer_1,pointer_2);printf("\n%d,%d\n",a,b);}
用断点可以发现指针变量一开始被赋值为"0xcccccccc“,这个地址是无效地址,不能被直接使用。
//下面是正确的程序,注意swap()的区别:
#include "stdio.h"void swap(int *p1, int *p2){int temp;temp=*p1;*p1=*p2;*p2=temp;}void main(){int a,b;int *pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if (a<b)swap(pointer_1,pointer_2);printf("\n%d,%d\n",a,b);}
下面的swap()函数并不能实现调换a和b值的功能,因为不能通过改变指针形参的值而改变指针实参的值
#include "stdio.h"void swap(int *p1, int *p2){int *p;p=p1;p1=p2;p2=p;}void main(){int a,b;int *pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if (a<b)swap(pointer_1,pointer_2);printf("\n%d,%d\n",a,b);}
- 指针必须初始化才能使用
- 指针使用前必须初始化
- 指针大小以及使用必须初始化
- 常量指针必须初始化
- 数组初始化才能使用
- String数组必须初始化之后才能赋值
- 大家来讨论!Java*为什么局部变量必须初始化才能使用?有在观察JVM的指点一下!
- 使用ajax提交必须alert才能赋值
- 指向结构体的指针必须初始化
- 何时必须使用初始化列表
- java使用之前必须初始化
- Java数组一定要初始化才能使用吗?
- 指针使用前初始化
- 指针使用前应先初始化
- 指针使用前应先初始化
- 使用scanf初始化指针
- TQuery的CachedUpdates必须陪合TUpdateSQL控件才能使用
- 笔记本必须插电才能使用联合编译器
- SQL之LEFT JOIN, RIGHT JOIN, INNER JOIN快速区分
- 将一个数分解成质因数相乘形式(如435234=251*17*17*3*2)
- class”类型重定义 || 防止头文件重复加载 || 两个类之间互相引用
- 一个简单的回调函数的例子
- C# 委托 协变 实例
- 指针必须初始化才能使用
- 一个数以最少步骤分解为另外两个数和差问题的解决
- 最新SSH版本
- extjs 之Ext.data.Store变更单行记录值【修改】
- 正则表达式 【维基百科,自由的百科全书】
- AXIS1版本 WSDL生成JAVA客户端
- HDOJ 1969 二分
- MySQL 索引优化 btree hash rtree
- User Location API 的使用/如何判断 找到的 位置提供者是最好的