A. c语言指针在函数调用中的问题
这说明你对指针和函数参数传递的理解不到位
这个程序里你想用函数F改变p,那么就要给F传递p的地址,p的类型是int*,那么它的的地址类型是int**,传递&p给F:
intmain()
{
voidF(int**p);//int**
int*p=NULL;
F(&p);//传地址
printf("%d",*p);
deletep;//释放
return0;
}
voidF(int**p)//int**
{
*p=newint;
**p=1;
}
或者用C++的引用:
intmain()
{
voidF(int*&p);//int*&
int*p=NULL;
F(p);//这里就是引用了
printf("%d",*p);
deletep;//释放
return0;
}
voidF(int*&p)//int*&
{
p=newint;
*p=1;
}
B. c语言中,一些关于子函数,参数的问题。。
这个问题你学到指针就明白了,
swap()函数中intx,y;都是重新开辟的内存的,
只是取了main函数中a,b的值而已本身和a,b是没有任何关系的。
你交换只是交换了新内存中x,y的值,而这块新内存中的值会在,函数执行完毕后被系统收回。
所以对main函数不造成任何影响。除非用指针变量直接对内存进行操作。
C. C语言指针调用函数问题
编写一个程序,采用结构数组记录许多学生的信息。这个程序允许用户输入信息来填充该数组,并打印出数组内容。
编写一个程序,采用一个结构体存放学生信息。应当使用子程序/函数来填写学生结构变量和打印学生结构变量的内容。
没有说一定要用指针啊……
D. C语言指针和和调用函数的问题
你的swap函数没返回值。如果是用参数做返回值,要确实改变其地址保存的值,函数内部改指针指向没用,那指针是局部变量,函数执行完就被回收,而原本的实参的值是没改变的。
这样做就能确实改变其指针指向地址的值
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
E. C语言指针调用函数问题,急求解释(本题是《c和指针》上的题目)
我不清楚你的疑问到底指哪些。我就你写的这些代码解读:
int read_column_numbers(int columns[], int max)函数功能:
传参数组首地址,及数组最大长度。
用户输入max个整数,只保存其中的正整数(负数忽略),如果正整数的个数是偶数则返回个数。否则程序结束。
void rearrange(char *output,char const *input,int n_columns, int const columns[])函数功能:
传参 数组output首地址 , 数组input首地址 ,用户输入正整数个数,正整数数组
迭代数组,根据用户的输入的数字作为input起始下标,复制并拼接到数组output中(具体逻辑我不研究了)。
strncpy(output + output_col,input + columns[col],nchars)这里就是就是拼接复制,变量output_col记录的是output 已保存字符长度,output + output_col就是每次接在已有字符后面放复制的字符。input + columns[col]是用户输入的数字作为起始位置的偏移量取nchars个字符复制到output 中。
总结:
一、
首先数组名作为参数传递,无论形参定义是指针还是数组(int *columns 和 int columns[ ]效果是一样的),最终都是传地址。
二、
数组形参定义char const *,修饰符const表示常量不可修改,这里const修饰的是*input,表示数组指针指向的地址内容不能修改,但是数组指针本身值可以修改。也就是说函数中可以改变input指向的地址(比如input++),但是不能改变其指向的值(比如input[0]='A')。
F. 关于c语言指针调用函数。。。。。。。。
第一行,定义一个函数指针p,该函数有两个整型形参,且返回整型数据;第二行,让函数指针p指向一个地址,该地址应该就是前面说到的那种函数的地址,需要对这个地址做强制类型转换为同类型的函数指针,才能正确赋值给p。
G. 有关于c语言中函数调用和指针
函数参数用值传递时,函数的形参只不过是实参的拷贝而已。也就是说,1中调用swap函数时,内存中实际上a,b,x,y四个变量都存在,x是a的拷贝,y是b的拷贝,对x,y的值进行交换,a,b的值并未交换。
而2中用了指针传递,swap中的a,b,实际上是指向了main中的a,b。这个swap中交换的是a,b指向的变量的值,也就是交换了main中的a,b的值。
H. 在C语言中,指向函数的指针怎么调用函数
1楼感觉对函数指针不是很了解,就不评论了. 2楼的基本还可以,但是int (*p)(),然后让它指向max函数,一个包含两个未知量的函数,这在后来的标准c里面是不支持的好像. 3楼吧,那么多*,感觉有点不大对. *是取内容,连着那么* ,我没试过,没有多少意义至少.他11级了,应该也不会怎么有错,你可以试试(我不打算加那么多*, 就不调试了).
程序里面对函数的调用,就是通过函数的入口地址,然转入函数. 这样的话,函数指针的意义就明显了.函数指针指向了函数的入口,即函数指针里是函数的入口地址. 指针不能指向函数这种说法肯定是不对的.话说回来,1楼的老兄可能看错书了,或者记错了.
类型匹配很重要,二楼的声明和使用不一致,这在老版的编译器里也是支持的.那时候ANSI标准还没有制定出来.现在而言,这种定义应该不被支持了才是.
那个声明应该如下:
int (*p)(int , int);
这样才能指向
int name(int,int)型的函数.么有实验过,但按这种写法是不错的肯定.
三楼那个********p,怎么都觉得不对.
I. C语言调用函数指针
并不是不规范的问题,你子程序写法只能在子程序中输出正确的数据,而在主函数中无法得到交换过的x和y的值。参考程序运用指针让子程序去读写a和b的值,在子程序执行完成后,a和b的值确实得到了交换。
你的程序中子程序采用的不是指针类型参数,这样子程序无法将交换过后的值传回来。
J. c语言中的指针问题,以及子函数的调用
第一个是在根据指针, 交换指针所指的数据
第二个虽然写的使用"指针"在实现, 实际上, 他是在奖p1 和p2两个本地的变量值进行交换, 而并不是奖两个地址所指向的内存单元进行交换
第二个函数你如果吧所有的int * 都改成int, 就能更清楚的看到他到底在干嘛了