一、从以下几个方面进行剖析
1.字符指针
2.指针数组
3.数组指针
4.数组传参和指针传参
字符指针:char*
一般使用`
int mian()
{
char ch='w';
char *pc=&ch;
*pc='w';
system("pause");
return 0;
}
另一种使用方法
int mian()
{
char* p="hello word";
printf("%s",p);
system("pause");
return 0;
}
这里并不是把字符串hello word存入p中,而是把字符串的首元素地址存放到p中。
指针数组:
指针数组是一个存放指针的数组
int* arr1[10];//整型指针的数组
char* arr2[10];//一级字符指针数组
char** arr3[10];//二级字符指针数组
数组指针:
数组指针不是数组是指针。
int(*p)[10]; 这里p先和星号结合,说明p是一个指针变量,然后指向的是一个大小为10的整形数组。所以p是一个指针,指向一个数组,因此叫数组指针。
数组指针的使用:
既然数组指针指向的是数组,那数字指针中存放的应该是数组的地址。
一个数组指针的使用:
void print_arr1(int arr[3][5],int row,int col)
{
int i=0;
int j=0;
for(i;i<row;i++)
{
for(j;j<col;j++)
{
printf("%d",arr[i][j]);
}
putchar('\n');
}
}
void print_arr2(int (*arr)[5],int row,int col)
{
int i=0;
int j=0;
for(i;i<row;i++)
{
for(j;j<col;j++)
{
printf("%d",arr[i][j]);
}
putchar('\n');
}
}
int main()
{
int arr[3][5]={1,2,3,4,5,6,7,8,9,10};
print_arr1(arr,3,5);
/*数组名arr,表示首元素地址
但是二维数组首元素地址是二维数组的第一行
因此这里传递的arr相当于第一行的地址,是一维数组的地址
可以数字指针来接收*/
print_arr2(arr,3,5);
system("pause");
return 0;
}```
数组传参和指针传参
一维数组传参
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
void test(int arr[])
{}
void test2(int arr[10])
{}
void test3(int *arr)
{}
void test4(int *arr[20])
{}
int main()
{
int arr[10]={0};
int *arr2[10]={0};
test(arr);
test4(arr2);
system("pause");
return 0;
}
二维数组传参
void test(int arr[3][5])
{}
void test(int arr[][5])
{}
void test(int *arr)
{}
void test(int *arr[5])
{}
void test(int (*arr)[5])
{}
void test(int **arr)
{}
int main()
{
int arr[3][5]={0};
test(arr);
system("pause");
return 0;
}
一级指针传参
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
void print(int *p,int sz)
{
int i=0;
for(i;i<sz;i++)
{
printf("%d\n",*(p+i));
}
}
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int *p=arr;
int sz=sizeof(arr)/sizeof(arr[0]);
print(arr,sz);
system("pause");
return 0;
}
二级指针传参
void test(int **p)
{
printf("num=%d\n",**p);
}
int main()
{
int n=10;
int *p=&n;
int **pc=&p;
test(pc);
test(&p);
system("pause");
return 0;
}
今天的总结就到这里了。