- 主题:关于指针,请大家看看这两段简单程序哪个有问题?
有问题的点我是真的没想明白。
第1段
int *test(int* b)
{
return b;
}
int main()
{
int a=20;
int* pa;
pa=&a;
int* p;
p=test(pa);
printf("%d\n",*p) ;//
return 0;
}
第2段
int *test(int b)
{
return &b;
}
int main()
{
int a=20;
int* p;
p=test(a);
printf("%d \n",*p) ;
return 0;
}
--
FROM 111.193.230.*
感谢大佬从原理进行的讲解
但是如果我需要一个函数对数组进行处理,并返回一个新数组该如何处理呢?比如下面
这个错误程序把数组每一项都减5
int* test(int* b)
{
int i;
int *p;//无地址的野指针?
for(i=0;i<5;i++)
{
*(p+i)=*(b+i)+10;
}
return p;
}
int main()
{
int arr[5]={1,2,3,4,5};
printf("%d \n",*arr) ;
int* pa;
pa=test(arr);
printf("%d \n",*pa) ;
return 0;
}
【 在 z16166 的大作中提到: 】
: 函数是区分形参、实参的
: int *test(int b)
: {
: ...................
--
FROM 111.193.230.*
我在B站学的教程,不知道课是怎么排的,前面先粗略的讲了一遍,所以你看我把青蛙跳
台阶、汉诺塔等课后习题都做了,结果最近那老师又回过头来细讲数组、指针什么的。
然后我才觉得自己原来写程序都是囫囵吞枣,有了很多疑问和新的认识。
【 在 z16166 的大作中提到: 】
: 新数组一般要动态分配内存,或者传已有的数组的指针进去。
: p = (int *) malloc(5 * sizeof(int));
: 你是在自己揣摩,还是看了啥不好的教程
: ...................
--
FROM 111.193.230.*
第1个特别神奇
我之前运行的时候不报错,但是不打印20,程序就运行结束了。
后来我在test函数中加了一个打印,再运行程序就可以打印出2个20了,去掉test中的p
rintf就不行。
int *test(int* b)
{
printf("%d\n",*b) ;
return b;
}
int main()
{
int a=20;
int* pa;
pa=&a;
int* p;
p=test(pa);
printf("hhahaaaa\n") ;
printf("%d\n",*p) ;//
return 0;
}
但是我今天试,已经没有任何问题了,百思不得其解
【 在 flw 的大作中提到: 】
: 说的是第二个吧。
: 第一个呢
--
FROM 111.193.230.*
又去了看了一下整个课程目录,原来是分了三个层次:初始、初阶、进阶,我现在学到
初阶了
https://www.bilibili.com/video/BV1Vm4y1r7jY/?p=82&spm_id_from=333.1007.top_r
ight_bar_window_history.content.click&vd_source=55f04a8f9e1d27866e6fb08e9235
538a
【 在 z16166 的大作中提到: 】
: 新数组一般要动态分配内存,或者传已有的数组的指针进去。
: p = (int *) malloc(5 * sizeof(int));
: 你是在自己揣摩,还是看了啥不好的教程
: ...................
--
FROM 111.193.230.*