c中关于指针的声明和定义的一些问题
2010-05-09 00:22
211 查看
首先说明一下,声明和定义是两个不同的概念,一个比较大的区别就是声明不分配空间,而定义分配。
现在来讨论一下关于定义指针是否为其分配内存的问题。
能够确定的是定义数组的时候是分配给它空间的。
首先看下面的程序;
#include<stdio.h>
main()
{
int *i;
*i=1;
printf("%d/n",*i);
}
程序直接崩掉了,看来定义一个指针是不为其分配空间的。
那再看一个程序
#include<stdio.h>
main()
{
int *i;
printf("%x/n",&i);
}
竟然过了!打印出了i的地址,是不是有点意外。
仔细分析,其实在定义了指针的时候,指针已存在于内存的某个位置,只不过它的指向是未定义的,这样直接调用*i的话,结果就是未定义的,所以比较安全的使用指针的方法应当是这样:
#include<stdio.h>
void main()
{
int *i = NULL;
int a=1;
i = &a;
if (i != NULL)
{
*i=a;
printf("%d",*i);
}
}
现在来讨论一下关于定义指针是否为其分配内存的问题。
能够确定的是定义数组的时候是分配给它空间的。
首先看下面的程序;
#include<stdio.h>
main()
{
int *i;
*i=1;
printf("%d/n",*i);
}
程序直接崩掉了,看来定义一个指针是不为其分配空间的。
那再看一个程序
#include<stdio.h>
main()
{
int *i;
printf("%x/n",&i);
}
竟然过了!打印出了i的地址,是不是有点意外。
仔细分析,其实在定义了指针的时候,指针已存在于内存的某个位置,只不过它的指向是未定义的,这样直接调用*i的话,结果就是未定义的,所以比较安全的使用指针的方法应当是这样:
#include<stdio.h>
void main()
{
int *i = NULL;
int a=1;
i = &a;
if (i != NULL)
{
*i=a;
printf("%d",*i);
}
}
相关文章推荐
- c中关于指针的声明和定义的一些问题
- c中关于指针的声明和定义的一些问题
- 关于指针定义的一些问题
- qt的关于编译条件的一些定义问题
- 关于字符串指针的一些问题及字符串的左旋转代码
- 关于oc定义的一些问题
- 关于String和StringBuffer的理解问题:指针、变量的声明、变量的值的变化
- 关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题
- 关于实例声明:C++中指针常量和常量指针的问题
- 关于PreferenceActivity的使用和一些问题的解决(自己定义Title和取值)
- 关于c++中一些指针问题的思考
- C++虚函数声明和定义以及g++编译遇到的一些问题
- 转载:关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题
- 关于数组指针,指针数组和字符串数组的一些问题
- 关于模板函数声明与定义的问题
- 关于野指针的一些问题与总结
- 关于数组和指针的一些基本问题
- 关于C语言的文件型指针和移位操作中的一些有趣问题的探讨
- 关于指针的一些问题追究
- 关于指针和数组对申请内存malloc和作为参数传递的一些问题