新浪博客

C语言-指针、指针作函数参数

2017-05-10 21:38阅读:
一、指针
&(取地址运算符):单目运算符,返回一个变量的地址
*(指针运算符):单目运算符,返回的是一个地址里面的变量的数据。
&*具有相同的优先级,自右向左结合。

*只有在声明的是时候表示是指针,其他任何情况单独出现* 都表示指针运算符。
二、什么是指针变量?
1、指针变量的声明: 数据类型 *变量名; int *p;
2、指针变量的赋值:
A、在声明指针的时候赋值:int *p=&a;
B、先声明,再赋值。 Int *p; p=&a;
C、
不允许把一个数赋值给指针变量:int *p; p=50000;(错误的)
3、指针变量的引用:

*变量名;Int *p; p=&a; *p=a;
三、指针做函数参数
#include 'stdio.h'

void Swap(int *pa1, int pb1);

int main()
{
int a, b;
int *pa,*pb; 建议:
遇见指针:1、这个指针的指向类型? 2、这个指针指向哪里? 3、指针自己的类型?
a = 6;
b = 3;
pa = &a;
pb = &b;

Swap(pa, pb);

printf('a=%db=%d', a, b);
}
void Swap(int *pa1, int *pb1)
{
int temp;
temp = *pa1;
*pa1 = *pb1;
*pb1 = temp;

}




四、总结
1.首地址
&a[0][0] a[0] &a[0] a &a
2.行地址:
1、0行的地址就是首地址
2、1&a[1][0] a[1] &a[1] a+1
3、第2&a[2][0] a[2] &a[2] a+2
4、第i&a[i][0] a[i] &a[i] a+i
蓝色的加法就加一维数组的字节数 橙色的加法加数据类型的字节数

3.通过行地址去找到nm列的元素。
关键是要搞清楚 作为一维数组做判断 还是以整体的二维数组来进行判断
nm列的元素 (&a[i][j]

(1) *(*(p+i)+j) (作为一维数组做判断)
例1:#include 'stdio.h'
void Input(int (*p)[10],int m ,int n);
void Output(int (*p)[10],int m ,int n);
int main()
{
int a[3][10];
Input(a,3,10);
Output(a,3,10);
return 0;
}
void Input(int (*p)[10],int m ,int n)
{
int i,j;
for(i=0;i
{
for(j=0;j
{
scanf('%d',*(p+i)+j);
}
}
}


void Output(int (*p)[10],int m ,int n)
{
int i,j;
for(i=0;i
{
for(j=0;j
{
printf('%d',*(*(p+i)+j));
}
printf('');
}
}




(2) &p[i*n+j] (矩阵列数为n)
例2:
#include
void Input(int *p,int m ,int n);
void Output(int *p,int m ,int n);
int main()
{
int a[3][4];
Input(*a,3,4);
Output(*a,3,4);
return 0;
}


void Input(int *p,int m ,int n)
{
int i,j;
for(i=0;i
{
for(j=0;j
{
scanf('%d',&p[i*n+j]);
}
}
}


void Output(int *p,int m ,int n)
{
int i,j;
for(i=0;i
{
for(j=0;j
{
printf('%d',p[i*n+j]);
}
printf('');
}
}

我的更多文章

下载客户端阅读体验更佳

APP专享