傻瓜式自助建站系统,想做网站的公司好,宁波营销网站建设外包,北京旧房改造装修哪家好目录 一、指针的运算
1、指针与整数相加减
2、指针-指针#xff08;地址-地址#xff09;
3、指针的关系运算
六、指针和数组
七、二级指针
八、指针数组 一、指针的运算
1、指针与整数相加减
看一下下面的代码#xff1a; #includestdio.h
int my_strlen(c…目录 一、指针的运算
1、指针与整数相加减
2、指针-指针地址-地址
3、指针的关系运算
六、指针和数组
七、二级指针
八、指针数组 一、指针的运算
1、指针与整数相加减
看一下下面的代码 #includestdio.h
int my_strlen(char* str)
{int count0;while(*str!\0){count;str;//指针加减整数}return count;
}
int main()
{int lenmy_strlen(abcdef);printf(%d\n,len);return 0;
}
指针加减整数的时候就要看看这个指针式什么类型的指针就决定着该指针所跨过的字节数比如上免得代码str为char*类型的指针当运行一次str时就会往后走一个字节str就指向了下一个字符。所以指针与整数相加减就是将指针在“字节”上运动跨的步子大小就是指针类型所决定啦。
2、指针-指针地址-地址
(1)、条件 指针都是指向同一块区间的 指针的类型是一致的
总结一下指针减指针是指针之间元素的个数 //strlen的模拟实现
#includestdio.h
int my_strlen(char* str)
{char* startstr;while(*str!\0){str;//指针加减整数}return str-start;//这里经过两个指针相减可以得到两个指针所指地址之间的元素个数
}
int main()
{int lenmy_strlen(abcdef);printf(%d\n,len);return 0;
}
3、指针的关系运算
下面是一个for循环遍历values数组的一个例子 //方法一
for(vp values[N_VALUES]; vp values[0];)
{*--vp 0;
}
//改进版本
for(vp values[N_VALUES-1]; vp values[0];vp--)
{*vp 0;
}
实际在绝大部分的编译器上是可以顺利完成任务的然而我们还是应该避免这样写因为标准并不保证
它可行。
标准规定
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较但是不允许与
指向第一个元素之前的那个内存位置的指针进行比较。
六、指针和数组
这里不得不提一下数组名这么一个东西他呢不只是单单一个名字这么简单他其实是首元素的地址换句话说一个指针如果指向数组首元素那么几乎可以说这个指针喝这个数组名是等价的。注意这里说的是几乎因为数组名在下面两个情况是不能用首地址这么简单的来理解
1. sizeof(数组名)计算整个数组的大小sizeof内部单独放一个数组名数组名表示整个数 组。 2. 数组名取出的是数组的地址。数组名数组名表示整个数组。 除去上面两种情况既然可以把数组名当成地址存放到一个指针中我们使用指针来访问一个就成为可能。
例子 #include stdio.h
int main()
{int arr[] {1,2,3,4,5,6,7,8,9,0};int *p arr; //指针存放数组首元素的地址int sz sizeof(arr)/sizeof(arr[0]);for(i0; isz; i){printf(arr[%d] %p p%d %p\n, i, arr[i], i, pi);}return 0;
} 所以 pi 其实计算的是数组 arr 下标为i的地址。
七、二级指针
二级指针是指向一级指针一级指针的值是变量的地址二级指针的值是一级指针的地址 #includestdio.h
int main()
{int a10;//a在内存空间申请4个字节//一级指针int* paa;//0x0012ff40pa是指针变量用来存放a地址也得向内存申请4/8字节//二级指针int** ppapa;//0x0012ff48ppa是指针变量用来存放pa地址也得向内存申请4/8字节return 0;
}
八、指针数组
指针数组是存放指针的数组 #includestdio.h
int main()
{int a1;int b2;int c3;int* arr[]{a,b,c};//arr就是指针数组分别a,b,c的地址给arr[0],arr[1],arr[2]for(int i0;i3;i){printf(%d ,*arr[i]);}return 0;
}
用指针数组模拟二维数组 #includestdio.h
int main()
{int a[]{1,2,3};int b[]{3,4,5};int c[]{5,6,7};int* arr[]{a,b,c};for(int i0;i3;i){for(int j0;j3;j){printf(%d,arr[i][j]);//模拟二维数组和二位数组还是有差距//printf(%d,*(*(arri)j));}printf(\n);}return 0;
} 今天的分享就到这啦
如果我的文章对您有帮助
请 “点赞” “收藏” “关注” 一键三连哦
想了解更多知识请前往重生之我在VS写bug
如果以上内容有什么问题欢迎留言大家一起学习共同进步。