C指针的疑惑(函数传址调用,如果传递的指针没有初始化会怎么样?)

原创 2010年01月07日 21:34:00

有下列简单的C程序,想一想程序运行的结果是什么?
#include<stdio.h>
#include<stdlib.h>
int *p;
//p=NULL    (1)
void test_p(int *p){
    p=(int *)malloc(sizeof(int));
    if(!p){
        perror("malloc faild/n");
    }else{
        printf("in test_p *p=%d/n“,*p=3);
    }
}
void init_p(){
    p=(int *)malloc(sizeof(int));
    if(!p){
        perror("in init_p malloc faild/n");
    }else{
        printf("in init_p p=%X *p=%d/n",(unsigned)p,*p=4);
    }
}
int main(){
    test_p(p);
    if(!p){
        printf("after executed test_p p is NULL/n");
    }else{
        printf("after executed test_p *p=%d/n",*p=4);
    }
    return 0;
}

1)    输出结果是:
    in test_p *p=3
    after executed test_p p is NULL
    为什么?
2)    如果我将//p=NULL的注释去掉,编译能够通过吗?
    不能!
3)    修改main函数中的if...else代码块为
    printf("p is %X/n",(unsigned)p);
    输出为p is 0,在大多数编译器中,都使用0来表示NULL。
4)    如果不掉用test_p而调用init_p呢?
    显然结果是在init_p内外p都被初始化了。

warning C4150: 删除指向不完整“XXX”类型的指针;没有调用析构函数

warning C4150:

【转】C#传委托给C的函数指针调用问题

C#传委托给C的函数指针调用问题C代码如下: #include "stdio.h" __declspec(dllexport) int Call(int (*qq)(int num),char * s...

C/C++语言函数参数传递:传值,传指针,传引用

前面我们介绍了函数的调用约定,明白了函数调用者与被调用者之间传递参数的顺序与如何进行栈恢复的。 实际上,函数调用者如何将参数传递给被调用者也是有讲究的。 总的来说,函数参数传递分为3种情况:传值,传指...

C/C++函数形参传实参时值传递、指针传递、引用传递的区别

值传递:形参是实参的副本(复制、拷贝),形参值的改变不会影响实参的值,这种方式是很常见的。 指针传递:形参是指针类型,形参作指针运算后指向的就是实参,所以会影响实参的值。这种方式也是很常见的。 引用传...

C/C++—— 在构造函数中调用虚函数能实现多态吗(Vptr指针初始化的过程分析)

问题引入:比如:如果我们想在父类的构造函数中调用虚函数,当定义子类对象的时候,父类的构造函数中的虚函数执行的是子类中的函数。...

c/c++向函数传递指针并修改其指向的问题

一个非常简单的用来交换两个数的值的函数,可以有若干种写法。 众所周知的错误写法为: #include using namespace std; void swap(int a, int b) { ...

C函数传递结构体指针 题目地址:http://ac.jobdu.com/problem.php?id=1061

/* 题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序, 并输出N个学生排序后的信息。 输入...

C专家编程 十五 使用指针向函数传递一个多维数组

使用上一节所描述的笨拙方法,可以解决标记数组范围这个难题。但是还存在一个问题, 就是如何在函数内部声明一个二维数组参数,这才是真正的麻烦所在。C语言没有办法表达 “这个数组的边界在不同的调用中可以变化...

纯c与c++:函数传递-指针/引用,typdef struct + 结构体/枚举

把C++改写C, 发现很多地方编译器报错, 总结了一下。 C的两种 指针例子,  C++一种 引用例子 #include void test1(int *a,int *b) { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C指针的疑惑(函数传址调用,如果传递的指针没有初始化会怎么样?)
举报原因:
原因补充:

(最多只允许输入30个字)