当前位置:首页 » 编程语言 » c语言的指针做参数

c语言的指针做参数

发布时间: 2022-04-04 17:28:12

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的地址

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:582
制作脚本网站 发布:2025-10-20 08:17:34 浏览:876
python中的init方法 发布:2025-10-20 08:17:33 浏览:571
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:757
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:673
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1000
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:244
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:103
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:795
python股票数据获取 发布:2025-10-20 07:39:44 浏览:701