重新学习C语言day14-指针进阶

厌伴老儒烹瓠叶,强随举子踏槐花。这篇文章主要讲述重新学习C语言day14-指针进阶相关的知识,希望能为你提供帮助。
指针回顾1、指针就是个变量,用来存放地址,地址唯一标识一块内存空间
2、指针的大小为固定的4/8个字节(32位平台/64位平台)
3、指针是有类型的,指针的类型决定了指针+-整数的步长,指针解引用时候的权限
4、指针的运算
字符指针

char str1[] = "hello";
char str2[] = "hello";
char *str3 = "hello"; //常量字符串-> 不能改
char *str4 = "hello";
if (str1 == str2)//数组名代表首元素地址
{
printf("str1 and str2 are same\\n");
}
else
{
printf("str1 and str2 are not same\\n");
}
if (str3 == str4)//相同的常量字符串只存了一份
{
printf("str3 and str4 are same\\n");
}
else
{
printf("str3 and str4 are not same\\n");
}
//str1 and str2 are not same
//str3 and str4 are same

数组指针指向数组的指针
int arr[10] = {1, 2, 3, 4, 5};
int(*parr)[10] = & arr; //parr是一个数组指针-> 其中存放的是数组的地址



double *d[5];
double *(*pd)[5]; //指向指针数组的指针



int arr[10] = {0};
int *p1 = arr;
int(*p2)[10] = & arr;
printf("%p\\n", p1); //000000000061FDF0-> 数组首元素的地址
printf("%p\\n", p1+1); //000000000061FDE4--跳过一个整型
printf("%p\\n", p2); //000000000061FDF0-> 数组的地址
printf("%p\\n", p2+1); //000000000061FE08--跳过整个数组
return 0;



int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int(*parr)[10] = & arr;
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", *(*(parr) + i));
//1 2 3 4 5 6 7 8 9 10
}

指针数组存放指针的数组


int a[] = {1, 2, 3, 4, 5};
int b[] = {2, 3, 4, 5, 6};
int c[] = {3, 4, 5, 6, 7};
int *arr[] = {a, b, c};
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
// printf("%d ", *(arr[i] + j));
printf("%d ",arr[i][j]);
}
printf("\\n");
}
/*
打印
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
*/

【重新学习C语言day14-指针进阶】

int arr[5]; //整型数组
int *parr1[10]; //整型指针的数组
int(*parr2)[10]; //数组指针,该指针指向一个数组,数组10个元素,每个元素的类型是int
int(*parr3[10])[5]; //存储数组指针的数组,该数组能够存放10个数组指针,每个指针能够指向一个数组,数组5个元素,每个元素是int型

数组传参和指针传参一维数组传参
void test(int arr[]) {}//ok
void test(int *arr) {}//ok
void test2(int *arr[]) {} //ok
void test2(int **arr) {}//ok
int main(){
int arr1[10] = {0};
int *arr2[20] = {0};
test1(arr1);
test2(arr2);
}

二维数组传参
void test3(int arr[3][5]) {} //ok
void test3(int arr[][5]) {}//ok
void test3(int arr[][]) {}//err
void test3(int *arr) {}//err
void test3(int *(arr)[5]) {} //ok
void test3(int **arr) {}//err
int main()
{
int arr[3][5] = {0};
test3(arr);
}

一级指针传参
#include < stdio.h>

    推荐阅读