电子商务网站的建设与维护企业网站内容如何更新
news/
2025/9/28 18:20:42/
文章来源:
电子商务网站的建设与维护,企业网站内容如何更新,山东大学网站设计与建设,软件开发专业都学什么个人主页#xff1a;点我进入主页 专栏分类#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 欢迎大家点赞#xff0c;评论#xff0c;收藏。 一起努力#xff0c;一起奔赴大厂。 目录
1.字符指针
2.指针数组
3.数组指针
4.数组传… 个人主页点我进入主页 专栏分类C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 欢迎大家点赞评论收藏。 一起努力一起奔赴大厂。 目录
1.字符指针
2.指针数组
3.数组指针
4.数组传参和指针传参
4.一维数组传参
4.2二维数组传参
4.3一级指针传参
4.4二级指针传参
5.函数指针 今天我主要给大家带来的是关于指针进阶的部分对于指针初阶还有疑问的小伙伴们可以点击指针的部分应用和指针基础进行学习经过初阶指针的学习我们知道指针就是一个变量是用来存放地址的指针的大小在不同机器中也不相同在32位机器中占用4个字节在64位机器中占用8个字节指针是有类型的指针的运算等知识今天主要学习的是字符指针数组指针指针数组数组传参和指针传参函数指针这几部分。
1.字符指针 整形指针是指整形的指针那么我们可以认为字符指针是指字符类型的指针具体的表达方式我们看以下代码
#includestdio.h
int main()
{char a A;char* p a;char arr[] abcdef;const char* q arr;printf(%c, abcdef[0]);*q q;return 0;
} 其中p就是一个字符指针。我们对于一个字符串我们想要用指针指向一个字符串时我们最好使用一个const进行修饰原因是我们使用指针时就会想让字符串的是否能改变它的值也就是*qq这一句我们知道字符串初始化后只能通过strcpy函数进行修改所以我们在定义字符指针时用const进行修饰一旦我们修改它的值就会报错让我们很容易找到问题的所在地。字符指针可以看成整形指针这两种指针的主要区别就是他们的类型
2.指针数组 整形指针————指向整形数据的指针 字符指针————指向字符数据的指针 指针数组————指向指针的数组 指针数组是数组中存放的地址例如代码
#includestdio.h
int main()
{int arr1[4] {0,1,2,3};int arr2[4] { 1,2,3,4 };int arr3[4] { 2,3,4,5 };int* arr[3] { arr1,arr2,arr3 };int i, j;for (i0;i3;i){for (j 0; j 4; j){printf(%d , arr[i][j]);}}return 0;
}
指针数组的主要作用就是用于创建二维数组。
3.数组指针 指针数组————指向指针的数组 数组指针————指向数组的指针 我们知道数组名是数组的首地址但是有一些例外例如sizeof(arr)这句代码中arr是数组的地址还有另一种我们代码如下
#includestdio.h
int main()
{int arr[5] { 0,1,2,3,4};printf(%p\n, arr);printf(%p\n, arr 1);printf(%p\n, arr[0]);printf(%p\n, arr[0]1);printf(%p\n, arr);printf(%p\n, arr1);return 0;
}
当我们运行代码可以看到 arr1和arr相差40个字节 其余的arr和arr1arr[0]1和arr[0]相差4个字节我们可以得到arr得到的是数组的地址arr和arr[0]是数组的首地址。数组指针具体是如何使用的我们可以看以下代码
#include stdio.h
int main()
{int arr[5] { 0,1,2,3,4 };int(*p)[5] arr;int i;for (i 0; i 5; i){printf(%d , (*p)[i]);}return 0;
}
我们用的是数组指针他需要包括指针和数组*p是指针【5】是数组那问题来了*p[5]是否可行呢答案是不可我们知道【】的优先级高于*所以p会先和【5】结合就又成了指针数组。
4.数组传参和指针传参
4.一维数组传参
我们先看一维数组传参代码如下
#include stdio.h
void print(int arr[], int sz)
{int i;for (i 0; i sz; i)printf(%d , arr[i]);
}
int main()
{int arr[5] { 0,1,2,3,4 };print(arr,5);
}
在形参中可以写成arr[]也可以写成arr[5]
4.2二维数组传参
代码如下
#include stdio.h
void print(int arr[3][2], int sz1,int sz2)
{int i,j;for (i 0; i sz1; i){for(j0;jsz2;j)printf(%d , arr[i][j]);}
}
int main()
{int arr[3][2] { {0,1},{1,2},{2,3} };print(arr,3,2);
}
我们知道在二维数组传参时行可以省略列不可以省略因此我们还可以吧形参写为arr[][2]。
4.3一级指针传参
#include stdio.h
void print(int *p, int sz)
{int i;for (i 0; i sz; i)printf(%d , *(pi));
}
int main()
{int arr[5] { 0,1,2,3,4 };print(arr,5);
}
我们可以看到一维数组传参和指针传参基本相同
4.4二级指针传参
代码如下;
#include stdio.h
void print(int** pp)
{printf(%d, **pp);
}
int main()
{int a 10;int* p a;print(p);return 0;
}
5.函数指针 数组指针————指向数组的指针 函数指针————指向函数的指针 #include stdio.h
int Add(int a, int b)
{return a b;
}
int main()
{int a 10;int b 20;printf(a b %d\n, Add(a, b));printf(Add %p\n, Add);printf( Add %p\n, Add);return 0;
} 我们知道函数也是有地址的我们Add可以得到函数的地址我们想到取地址数组名是数组的地址和取地址函数名是函数的地址那数组名是数组的首地址函数名是不是函数的首地址呢事实上函数没有首地址它的函数名就是函数的地址和取地址函数名是一个意思那什么是函数指针呢我们知道数组指针的形式是*p[5]的形式那函数指针就是void*p(int ,char)的形式其中int char是形参的数据类型,void是函数的返回类型。 我们看两段有趣的代码 (*(void (*)())0)() 其中void (*)(是函数指针void (*)()0是强制转换*0相当于调用0地址的函数。 void (*signal(int , void(*)(int)))(int); void(*)(int)是函数指针signal(int , void(*)(int))是一个函数一个参数是int类型一个是函数指针类型void(*signal())(int)是指signal函数返回类型是void参数是int 今天的内容就结束了希望大家可以点赞评论收藏。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920965.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!