c语言的指针做参数
Ⅰ c语言指针做形参
但是如果在main中的声明改为sb(int *b)则没有任何问题,不是说声明的时候可以省略参数名吗??怎么会??
是啊,但你也不能把*漏掉阿;
应该申明为:void sb(int* );
Ⅱ c语言指针做函数参数问题:
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
int fun(int &a,int&b)是引用是正确的。
你题目中这个函数作用应该是交换两个数。这种交换函数是相当典型的。不能够直接用值去交换,而必须用值的地址去交换才能最终转换。
是考试中常考查的。给个例子你运行看看就知道了:
#include<iostream.h>
void swap1(int a1,int b1)
{
int temp1=a1;
a1=b1;
b1=temp1;
}
void swap2(int &a2,int &b2)
{
int temp2=a2;
a2=b2;
b2=temp2;
}
main()
{
int a=8,b=5;
cout<<"初始时值分别为: a="<<a<<" b="<<b<<endl;
swap1(a,b);
cout<<"不使用地址传递后产生交换无变化: a="<<a<<' '<<"b="<<b<<endl;
swap2(a,b);
cout<<"用地址传递后产生正确的交换: a="<<a<<' '<<"b="<<b<<endl;
return 0;
}
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
---就是不能理解怎样实现将实参值改变的过程?
实际上是这样的,看上面的这个例子,swap2(a,b)函数,将实参a,b的值的地址(注意是地址)赋于&a2,&b2。此时a2,b2的在内存中占的地址和a,b在内存中占的地址是一样的,所以实现了a2和b2的交换也就实现在a和b的交换。a2,b2是对a,b引用它。
Ⅲ c语言指针的指针做函数参数
定义sort函数时使用的参数是指针,需要注意的是这个指针是指向数组的,数组的名称其实就是一个指针,所以p可以做sort的参数
Ⅳ C语言的指针作函数参数
改成下面代码看看:
#include<stdio.h>
voidabc(int*i,int*j)
{
intm;
m=*i;//指针变量的值也就是地址不能赋值给一般变量
*i=*j;//*i,*j才是指针变量指向的变量的值
*j=m;
}
voidmain()
{
inta,b;
int*pa=&a,*pb=&b;
printf("请输入a,b的值:");
scanf("%d,%d",&a,&b);
abc(pa,pb);//
printf("a=%d b=%d ",a,b);
}
Ⅳ ★C语言 指针作函数参数
void fun(char *c,int d)
使用指针作为参数时,指针变量c指向了变量b,当c变化时,b也会变化。这里*c=*c+1,是*c由a变为b。
第二个参数d变化时,a并不会变化。
%e是一种转换说明符号,表示浮点数,并且采用e计数法。
比如2.12e2
Ⅵ C语言,用指针的指针做形参,我这个程序应该怎么改
#include <stdio.h>
#include <string.h>
void sort(char **p,int n)
{
int i,j;
char * t;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if( strcmp( *(p+i), *(p+i+1) ) > 0 )
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
void main()
{
char **p,*pstr[5],str[5][20];
int i,n=5;
for(i=0;i<n;i++)
pstr[i]=str[i];
printf("input n strings:
");
for(i=0;i<n;i++)
scanf("%s",pstr[i]);
p=pstr;
sort(p,n);
printf("strings sorted:
");
for(i=0;i<n;i++)
printf("%s
",pstr[i]);
}
你仔细对比一下
分析指针时,需要看这个变量指向的是谁,指向是什么类型。
该程序中,main函数中:
pstr指向str;
p指向pstr;
实参是传递的p,即指针数组pstr的首地址;
sort函数中:
p接收的是pstr的首地址,t是char *类型,其实你想用它来存储指针数组的地址,交换中应用指针数组的地址,而非其存储的地址。
Ⅶ c语言指针做形参
严格来说在windows下也是存在地址越界的
指针a和b实际指向的是在常量区的字符串首地址,常量区是不允许写操作的
不很清楚为什么window不报错,可能是编译检查不严格,运行可能报错
要修改只需给a和b分配足够内存空间就可以了
比如char a[128]; char b[128];
或者char* a = (char*) malloc(128* sizeof(char));
用后一种时要在使用完之后free掉
Ⅷ C语言 指针做参数
一看就知道是个初学者吧,就按照你自己的思路,给你解释一下编译出错的信息吧。
错误1: password没定义,某些编译器要求将要调用的函数在前面声明,或将该函数定义在主函数之前。 解决方法两种:1。在main()之前加上一句 int password(char *,char *);
2. 将
int password(char *p,char *q)
{ int a;
。。。。。。
}
整个放到 main()之前。
错误2~5: strcmp(*m,*n) 应该换成strcmp(m,n), m,n已经定义为字符指针,理解为字符串。而*m,*n则是两个字符串的第一个字符。
Ⅸ 关于c语言中指针的指针作为函数参数的问题
clrscr()当然不能用啊 如果你是在VC6.0的环境中编译的话
这个函数只能在TC中用,在VC中就不能用了
如果用Turboc2.0的话,我记得不用包含那个头文件,直接就可以用的。它是C的图形函数,C++里不能用了。
你是不是以前用TC写程序啊?我也是,刚转成VC时也不太习惯。VC6.0里包含#include <stdlib.h> 这个文件,想刷屏时就system("cls"); 便能起到相同的效果。
Ⅹ c语言指针做参数

*a=99;//相当于main函数中的x=99;
t=a; //t也指向main中的x
返回的值是x的地址
