做营销型网站的企业,网站合作建设方案,专业网站改版,石家庄高端网站开发大家好#xff01;指针的初阶内容我已经写好#xff0c;可移步至我的文章#xff1a;c语言进阶部分详解#xff08;指针初阶#xff09;_总之就是非常唔姆的博客-CSDN博客 基本内容我便不再赘述#xff0c;直接带大家进入进阶内容#xff1a; 目录
一.字符指针
1.讲解…大家好指针的初阶内容我已经写好可移步至我的文章c语言进阶部分详解指针初阶_总之就是非常唔姆的博客-CSDN博客 基本内容我便不再赘述直接带大家进入进阶内容 目录
一.字符指针
1.讲解
2.例题
二.指针数组
1.讲解
2.练习
三.数组指针
1.数组指针的定义
2.数组指针与指针数组在语法上的对比
3.数组名VS数组名
4.数组指针的使用 四.数组参数、指针参数
1.一维数组传参 2.二维数组传参 3.一级指针传参
4.二级指针传参
思考当函数的参数为二级指针的时候可以接收什么参数 一.字符指针
1.讲解 在指针的类型中我们知道有一种指针类型为字符指针 char* 其一般的使用场景为这样
#includestdio.h
int main()
{char a z;char* pa a;return 0;
} 还有这样
int main()
{char* arr hello;printf(%s, arr);return 0;
} 针对char* arr hello;这个语句特别容易让各位以为是把字符串 hello放到字符指针 arr 里了但是本质是把字符串 hello首字符的地址放到了arr中 2.例题
下面来看一个例题加深理解大家可以先思考一下再进行答案的比对
int main()
{char str1[] hello;char str2[] hello;const char* str3 hello;const char* str4 hello;if (str1 str2)printf(str1 and str2 are same\n);elseprintf(str1 and str2 are not same\n);if (str3 str4)printf(str3 and str4 are same\n);elseprintf(str3 and str4 are not same\n);return 0;
}
答案 各位对了吗 使用运算符比较指针时实际上比较的是指针所指向的地址是否相同而不是比较字符串的内容是否相同这里str3和str4指向的是一个同一个常量字符串。C/C会把常量字符串存储到单独的一个内存区域当几个指针。指向同一个字符串的时候他们实际会指向同一块内存用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同str3和str4不同 二.指针数组
1.讲解 指针数组是一个数组其中的每个元素都是指针。它可以存储多个指针每个指针可以指向不同类型的数据。声明指针数组的语法为type *ptr[size]其中type是指针指向的数据类型size是数组的大小 示例int num1 10, num2 20, num3 30; int *ptr[3] {num1, num2, num3}; // 声明一个包含3个整型指针的数组 2.练习
用指针数组来模拟二维数组
int main()
{int arr1[4] { 1,2,4,5 };int arr2[4] { 2,2,5,5 };int arr3[4] { 1,1,4,4 };int* pa[3] { arr1,arr2,arr3 };for (int i 0; i 3; i){for (int j 0; j 4; j){printf(%d , pa[i][j]);}printf(\n);}return 0;
} 三.数组指针 1.数组指针的定义 数组指针是指向数组的指针变量。它可以指向一个数组的首元素也可以指向整个数组。声明数组指针的语法为type (*ptr)[size]其中type是数组元素的类型size是数组的大小 示例int arr[5] {1, 2, 3, 4, 5}; int (*ptr)[5] arr; // 声明一个指向包含5个整数的数组的指针 2.数组指针与指针数组在语法上的对比
int *p1[10]; int (*p2)[10]; int (*p)[10];为数组指针 //解释p先和*结合说明p是一个指针变量然后指着指向的是一个大小为10个整型的数组。所以p是一个指针指向一个数组叫数组指针。 //这里要注意[]的优先级要高于*号的所以必须加上来保证p先和*结合 int *p1[10];为指针数组 //解释p先和[]结合说明p是一个数组然后数组的类型为int* 3.数组名VS数组名 arr和arr虽然值是一样的但是意义应该不一样的 arr 表示的是数组的地址而不是数组首元素的地址数组的地址1跳过整个数组的大小数组名是数组首元素的地址但有两个例外 1.sizeof(数组名),这里的数组名表示整个数组sizeof(数组名)计算的是整个数组的大小单位是字节。 2.数组名这里的数组名表示整个数组取出的是数组的地址 4.数组指针的使用
void print_arr(int(*arr)[5], int row, int col)
{for (int i 0; i row; i){for (int j 0; j col; j){printf(%d , arr[i][j]);}printf(\n);}
}
int main()
{int arr[3][5] { 1,2,3,4,5,6,7,8,9,10 };//数组名arr表示首元素的地址//但是二维数组的首元素是二维数组的第一行//所以这里传递的arr其实相当于第一行的地址是一维数组(有五个元素)的地址//可以数组指针来接收print_arr(arr, 3, 5);return 0;
} int arr[5]; arr是一个能够存放5个整型数据的数组int *parr1[10]; parr1是一个数组数组有10个元素每个元素的类型是int*int (*parr2)[10]; parr2是一个指针该指针是指向数值的指向的数组有10个元素每个元素的类型是intint (*parr3[10])[5]; parr3是一个数组是存放数组指针的数组这个数组有10个元素存放的这个数组指针指向的数组有5个元素每个元素是int类型。 理解parr3[10]可知是一个数组int (* )[5]是一个数组指针类型所以总的看是一个存放数组指针类型的数组。 四.数组参数、指针参数
1.一维数组传参 数组传参形参是可以写成数组形式 数组传参的本质是传递了数组首元素的地址形参也可以是指针 void test(int arr[])//可以 数组传参形参是可以写成数组形式的
{}
void test(int arr[10])//可以
{}
void test(int* arr)//可以 数组传参的本质是传递了数组首元素的地址形参也可以是指针
{}
void test2(int* arr[20])//可以
{}
void test2(int** arr)//可以 传过来的是int* 的地址就用int**来接收
{}
int main()
{int arr[10] { 0 };int* arr2[20] { 0 };test(arr);test2(arr2);
} 2.二维数组传参 形参为二维数组或者数组指针 //总结二维数组传参函数形参的设计只能省略第一个[]的数字。
//因为对一个二维数组可以不知道有多少行但是必须知道一行多少元素。
//这样才方便运算。void test(int arr[3][5])//可以
{}
void test(int arr[][])//不可以只能省略行不能省略列
{}
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);
} 3.一级指针传参 形参的部分写成一级指针就行了 void print(int* p, int sz) //形参的部分写成一级指针就行了
{int i 0;for (i 0; i sz; i){printf(%d\n, *(p i));}
}
int main()
{int arr[10] { 1,2,3,4,5,6,7,8,9 };int* pa arr;int sz sizeof(arr) / sizeof(arr[0]);//一级指针p传给函数print(pa, sz);return 0;
}
4.二级指针传参 就用二级指针来接收 void test(int** ptr)
{printf(num %d\n, **ptr);
}
int main()
{int n 10;int* p n;int** pp p;test(pp);//传过来的是二级指针test(p);return 0;
}
思考当函数的参数为二级指针的时候可以接收什么参数 只要是一级指针的地址就行 int a10; int* pa; int** ppp; test(p); test(pp); int* arr[10]; 指针数组首元素为一级指针传过来首元素的地址 test(arr); 这次的内容梳理就先到这里了我会加快更新后续内容的感谢大家的支持 文章转载自: http://www.morning.nnqrb.cn.gov.cn.nnqrb.cn http://www.morning.crkhd.cn.gov.cn.crkhd.cn http://www.morning.yzdth.cn.gov.cn.yzdth.cn http://www.morning.cjwkf.cn.gov.cn.cjwkf.cn http://www.morning.kbfzp.cn.gov.cn.kbfzp.cn http://www.morning.yfnhg.cn.gov.cn.yfnhg.cn http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.dqrhz.cn.gov.cn.dqrhz.cn http://www.morning.rykmf.cn.gov.cn.rykmf.cn http://www.morning.tznlz.cn.gov.cn.tznlz.cn http://www.morning.tdzxy.cn.gov.cn.tdzxy.cn http://www.morning.dyfmh.cn.gov.cn.dyfmh.cn http://www.morning.spxsm.cn.gov.cn.spxsm.cn http://www.morning.rycd.cn.gov.cn.rycd.cn http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn http://www.morning.jpgfx.cn.gov.cn.jpgfx.cn http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn http://www.morning.krtky.cn.gov.cn.krtky.cn http://www.morning.xqjrg.cn.gov.cn.xqjrg.cn http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.khfk.cn.gov.cn.khfk.cn http://www.morning.lznqb.cn.gov.cn.lznqb.cn http://www.morning.c7624.cn.gov.cn.c7624.cn http://www.morning.rstrc.cn.gov.cn.rstrc.cn http://www.morning.bntgy.cn.gov.cn.bntgy.cn http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.htbbp.cn.gov.cn.htbbp.cn http://www.morning.eronghe.com.gov.cn.eronghe.com http://www.morning.cjmmt.cn.gov.cn.cjmmt.cn http://www.morning.ptzbg.cn.gov.cn.ptzbg.cn http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn http://www.morning.knlbg.cn.gov.cn.knlbg.cn http://www.morning.ybmp.cn.gov.cn.ybmp.cn http://www.morning.qxljc.cn.gov.cn.qxljc.cn http://www.morning.qhmql.cn.gov.cn.qhmql.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.jpzcq.cn.gov.cn.jpzcq.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.ldqrd.cn.gov.cn.ldqrd.cn http://www.morning.kldtf.cn.gov.cn.kldtf.cn http://www.morning.mcqhb.cn.gov.cn.mcqhb.cn http://www.morning.pzpj.cn.gov.cn.pzpj.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.twfdm.cn.gov.cn.twfdm.cn http://www.morning.ghryk.cn.gov.cn.ghryk.cn http://www.morning.ydxwj.cn.gov.cn.ydxwj.cn http://www.morning.brsgw.cn.gov.cn.brsgw.cn http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn http://www.morning.qkrqt.cn.gov.cn.qkrqt.cn http://www.morning.jnkng.cn.gov.cn.jnkng.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.mllmm.cn.gov.cn.mllmm.cn http://www.morning.qbwyd.cn.gov.cn.qbwyd.cn http://www.morning.hybmz.cn.gov.cn.hybmz.cn http://www.morning.fosfox.com.gov.cn.fosfox.com http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn http://www.morning.pswqx.cn.gov.cn.pswqx.cn http://www.morning.wrtbx.cn.gov.cn.wrtbx.cn http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn http://www.morning.nckjk.cn.gov.cn.nckjk.cn http://www.morning.bljcb.cn.gov.cn.bljcb.cn http://www.morning.rymb.cn.gov.cn.rymb.cn http://www.morning.mwhqd.cn.gov.cn.mwhqd.cn http://www.morning.yrflh.cn.gov.cn.yrflh.cn http://www.morning.qqrqb.cn.gov.cn.qqrqb.cn http://www.morning.chxsn.cn.gov.cn.chxsn.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.wfbnp.cn.gov.cn.wfbnp.cn http://www.morning.gnlyq.cn.gov.cn.gnlyq.cn http://www.morning.ldfcb.cn.gov.cn.ldfcb.cn http://www.morning.kxgn.cn.gov.cn.kxgn.cn http://www.morning.dtrzw.cn.gov.cn.dtrzw.cn http://www.morning.frfpx.cn.gov.cn.frfpx.cn http://www.morning.bhwll.cn.gov.cn.bhwll.cn http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn http://www.morning.smnxr.cn.gov.cn.smnxr.cn http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com http://www.morning.hrzhg.cn.gov.cn.hrzhg.cn http://www.morning.jwtwf.cn.gov.cn.jwtwf.cn http://www.morning.kxnnh.cn.gov.cn.kxnnh.cn