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