本人要指针作为形参,传递参数出来,下面的代码实现过程,但是本人不太懂。
#include<stdio.h>
//*****************************************************************************/
#define AUDIO1_1_FILE_NAME “Audio1_1.mp3”
#define AUDIO1_2_FILE_NAME “Audio2_1.mp3”
#define AUDIO1_3_FILE_NAME “Audio3_1.mp3”
//*****************************************************************************/
void Point_ParmToReturn (unsigned char *&filename,unsigned char index)//?
{
switch (index)
{
case 1:
filename = (unsigned char *)&(*AUDIO1_1_FILE_NAME);//?
break;
case 2:
filename = (unsigned char *)&(*AUDIO1_2_FILE_NAME);
break;
case 3:
filename = (unsigned char *)&(*AUDIO1_3_FILE_NAME);
break;
default:
break;
}
printf(“%s\n”,filename);
}
int main()
{
unsigned int a = 0;
unsigned char *fname = NULL;
//unsigned char *fname = new unsigned char [20*sizeof (unsigned char)];
Point_ParmToReturn(fname,1);
printf(“============================\n”);
printf(“%s\n”,fname);
printf(“–\n”);
Point_ParmToReturn(fname,2);
printf(“============================\n”);
printf(“%s\n”,fname);
printf(“–\n”);
Point_ParmToReturn(fname,3);
printf(“============================\n”);
printf(“%s\n”,fname);
printf(“–\n”);
//delete []fname;
while (1);
return 0;
}
#include<stdio.h>
//*****************************************************************************/
#define AUDIO1_1_FILE_NAME “Audio1_1.mp3”
#define AUDIO1_2_FILE_NAME “Audio2_1.mp3”
#define AUDIO1_3_FILE_NAME “Audio3_1.mp3”
//*****************************************************************************/
void Point_ParmToReturn (unsigned char *&filename,unsigned char index)//?
{
switch (index)
{
case 1:
filename = (unsigned char *)&(*AUDIO1_1_FILE_NAME);//?
break;
case 2:
filename = (unsigned char *)&(*AUDIO1_2_FILE_NAME);
break;
case 3:
filename = (unsigned char *)&(*AUDIO1_3_FILE_NAME);
break;
default:
break;
}
printf(“%s\n”,filename);
}
int main()
{
unsigned int a = 0;
unsigned char *fname = NULL;
//unsigned char *fname = new unsigned char [20*sizeof (unsigned char)];
Point_ParmToReturn(fname,1);
printf(“============================\n”);
printf(“%s\n”,fname);
printf(“–\n”);
Point_ParmToReturn(fname,2);
printf(“============================\n”);
printf(“%s\n”,fname);
printf(“–\n”);
Point_ParmToReturn(fname,3);
printf(“============================\n”);
printf(“%s\n”,fname);
printf(“–\n”);
//delete []fname;
while (1);
return 0;
}
解决方案:5分
这个unsigned char *&filename 看不懂吗? filename 是引用, 引用的内容是指针
解决方案:20分
原因是不能通过形参指针参数,
修改实参指针本人
指针参数一样是值传递。
C++引用参数才是 引用传递,也就是 地址传递。
C 用指针值传递,可以模拟引用(地址)传递
但是调用端 传递的实参,是个地址(或说就是指针)
被调函数 形参是个指针
但是假如传入一个能被改变指针值 的指针,
一样要传递指针的地址;形参为二级(或多级)指针
修改实参指针本人
指针参数一样是值传递。
C++引用参数才是 引用传递,也就是 地址传递。
C 用指针值传递,可以模拟引用(地址)传递
但是调用端 传递的实参,是个地址(或说就是指针)
被调函数 形参是个指针
但是假如传入一个能被改变指针值 的指针,
一样要传递指针的地址;形参为二级(或多级)指针
解决方案:15分
传指针, 只能修改指针指向的内容, 改不了指针本身,