指针
如果存在int a=1,*p=&a;
那么这里面&指的是直接取地址符号&a就是取得了存储a这个变量的地址。
p=&a指的是把&a取得的地址交给p;而p指的是a的值p才指的是a的地址。
函数指针:char (*p)(int a,int b)里面的(*p)(int a,int b)指的是指向一个有两个int 参数的函数char为你指向的函数的返回值类型。
对于数组指针的定义:如果存在int arr[10];
*arr指的是arr[0]的值arr指的是数组存储第一个值得地址;
!函数的值传递为单向传递形式参数不能改变main函数的实参不会改变值。
二维数组的指针传入:
int a[row][col];传入函数时函数头void f(int (*a)[col]){};主函数写f(a);
#include<stdio.h>
void f(int (*a)[2]){
printf ("%d",*((*a+1)+1));
}
int main(){
int a[2][2]={1,2,3,4} ;
f(a);
return 0;
}//输出结果为3;
#include<stdio.h>
void f(int (*a)[2]){
printf ("%d",**a);
}
int main(){
int a[2][2]={1,2,3,4} ;
f(a);
return 0;
}//此时输出结果是1;
所以说*(*(a+)+?):里面的a加的是行数而后面加的是列数;
地址的输出用:%p或者%d都行;
先有指向,才能使用,不然容易出错,可以先定义为null;
形参指针,实参是地址或者指针;
当指针指向字符串,可以用%s输出指针输出字符串
数组名就代表数组首元素的地址,数组名就是一个不能改变的指针;
char a[3]="ab"
char *p1=a;
char *p="abc";
printf ("%s",p);
printf ("%s",p1);
//输出abc;
\\\