70,020
社区成员




//这个好理解一些
//把*p理解为指向当前函数栈上的第4个变量的指针(从变量开始分配的地方第4Byte看作一个变量,所以a在这里认为是4个)
//a中有4个元素,a可以转为第向fun上第4个变量的指针
//这里用4的原因是不必去理会因为变量对齐带来的问题
//两个函数都有一个参数是保证了相同的上下文
#include <stdio.h>
int* fun(int k)
{
int a[4]={1,2,3,4};
int (*p)[4] = &a; //定义一指向一维数组的指针,并初始化
return *p; //返回的为数组名(指向int型的指针)
}
void fun2(int* pInt) //调用函数定义
{
int a[4]={5,6,7,8};
for(int i=0; i <3; i++)
{
printf("%d\n",*(pInt + i));
}
}
void main()
{
fun2(fun(1));
}
//下面的理论结果为678
#include <stdio.h>
int* fun()
{
int a[4]={1,2,3,4};
int (*p)[4] = &a; //定义一指向一维数组的指针,并初始化
return *p; //返回的为数组名(指向int型的指针)
}
void fun2(int* pInt) //调用函数定义
{
int a[4]={5,6,7,8};
for(int i=0; i <3; i++)
{
printf("%d\n",*(pInt + i));
}
}
void main()
{
fun2(fun());
}
int* fun()
{
static int a[3]={1,2,3}; //加个static 就好了,因为static的作用域就是 整个程序,一直到最后才释放掉的。
//好看看 书上的有关作用域的问题吧!
int (*p)[3] = &a; //定义一指向一维数组的指针,并初始化
return *p; //返回的为数组名(指向int型的指针)
//返回值有误! 返回局部变量的指针或引用是 大忌,因为在调用该函数完后,局部变量已经释放掉了。
//指像不明确的对象或引用不明确的对象肯地是错误的。
}
int* fun()
{
int a[3]={1,2,3};
int (*p)[3] = &a; //定义一指向一维数组的指针,并初始化
return *p; //返回的为数组名(指向int型的指针)
//返回值有误! 返回局部变量的指针或引用是 大忌,因为在调用该函数完后,局部变量已经释放掉了。
//指像不明确的对象或引用不明确的对象肯地是错误的。
}
//因为你返回的是栈上的变量,函数返回时已经撤消了
//用成static就不在栈上,这就OK了
#include <stdio.h>
int* fun()
{
static int a[3]={1,2,3};
int (*p)[3] = &a; //定义一指向一维数组的指针,并初始化
return *p; //返回的为数组名(指向int型的指针)
}
void fun2(int* pInt) //调用函数定义
{
for(int i=0; i <3; i++)
{
printf("%d\n",*(pInt + i));
}
}
void main()
{
fun2(fun());
}
1
2
3
Press any key to continue