1,c语言中的指针*p=*&a;将a的值赋给p指向的地址空间 。p=&a;*将a的地址赋值给p 。*p=&a将a的地址付给p指向的地址空间 。
2,c语言的指针类型都有那些在内存中如何分配基类型加*基类型有多少 , 指针类型就有多少 。计算机为指针分配时都是4字节,不分类型如:char *p;int *p;float *p;double *p;struct student *p;union student *p;void *p;等等,占的内存都是4字节不懂的追问【c语言里的指针有几种,c语言中的指针】
3 , c语言中的指针包括什么普通指针 int *p指针数组 int *p[10]数组指针 int (*p)[10]二级指针 int **p函数指针int (*p)()指针函数 int* p()不可以 。指针变量在使用前必须初始化,未初始化的局部自动变量的值是随机的,a和b可能指向内存中的任意地址 。当执行*a=10;和*b=20;这两条赋值时会破坏内存中原有的数据 , 如果a和b指向的是不能读写的区域,那么就会产生严重的错误 。你这个代码中a和b就是野指针 。指针是一个基本的东西没法再分类了吧……看用在什么地方和指向什么了?
4 , C语言里几种容易混淆的指针1、指针数组: 形如:int * p[10]; //一个指针数组 , 数组里面有10个元素,每一个元素都是一个int型的指针 数组内的每一个元素都是一个指针变量(这时注意每个元素所占的内存单元大小是地址的长度而不是类型长度)2、数组指针:形如:int (* b)[10];//一个数组指针,指针指向一个列长度为十的一个二维数组的第一行的行地址 。也称作行指针 , 该指针指向了一个长度为10的数组的行首地址; 如:b表示第一行的首地址;b+1表示第二行首地址*(b) = b[0][0];*(b+1) = b[1][0]; *(*(b+i)+j) = b[i][j]13、指向指针的指针:形如: int **c = p;//二级指针c,指向了指针数组p的首地址&p[0],即指向了指针数组的第一个指针的地址 该指针大小也是取决于操作系统,它跟一级指针其实本质上是没有差别的,只是说是有连环指向的这种感觉 。c是指向指针的指针,因此它使用间接取址符时需要两次才能取出目标的内容 。比如:*c表示的是p[0]的地址,而**c表示的是p[0]地址中的内容c == &p[0];// 指针数组中第一个指针元素的地址*c == p[0];// 指针数组中第一个指针元素地址的内容 , 即目标变量的地址**c == *p[0]; // 指针数组中第一个指针元素指向的目标变量值5 , c语言 指针#include <stdio.h>int main() int a[10]= for(p=a;p<a+10;p++)//p是指针,批向数组的第一个元素,并将指针移到下一个元素 printf("%d,",*p++);//输出指针所指向的元素的内存,并将指针移到下一个元素 //上面是两次指向一下人元素,也就是说一次循环+2,++在后边是先使用再+1 printf("\n"); for(p=a;p<a+10;p++) printf("%d,",*++p);//++在前边,是先自加再使用 printf("\n"); return 0 ;}for(p=a;p<a+10;p++) //执行之后p的地址加1printf("%d,",*p++); //这句是每次执行之后的p所指向的地址加1,第一次是a[0]的值这样每次循环p的地址加2,所以执行的结果是:1 , 3,5 , 7,9for(p=a;p<a+10;p++) //执行之后p的地址加1printf("%d,",*++p); //这句是每次执行之前的p所指向的地址加1,第一次是a[1]的值这样每次循环p的地址加2,所以执行的结果是:2,4,6,8,0这里主要是*p++和*++p的问题,第一个for循环中p=a=a[0]=1<1+10运行printf语句 输出*p的值然后p值加1(printf语句中的p++),也就是指针指向后一个地址即a[1]=2,然后执行p值加1(for括号里的p++) , 也就是指针指向后一个地址即a[2]=3,以此类推输出1 , 3,5,7,9第二个for循环中p=a=a[0]=1<1+10运行printf语句 p值加1也就是*p指针指向后一个地址即a[1]=2然后输出*p的值(printf语句中的++p), , 然后执行p值加1(for括号里的p++),也就是指针指向后一个地址即a[2]=3 , 以此类推输出2,4,6 , 8,0我也是初学者,这是我自己的理解,有些术语还不会说了 , 希望能这样解释清楚了吧 。第一个循环体中,先输出第1个元素,然后再指针后移 , 在循环计数的地方再后移一次,这样下次再输出的时候就是第三个元素了,所以输出下素为奇数的元素;第二个循环体中,先指针后移,然后再输出,这样就输出了第二个元素 , 之后再在循环计数的地方再后移一次,这样下次再输出的时候就是第四个元素了,所以输出下素为偶数的元素;运行结果如下图所示:
推荐阅读
- 功能分析包含的内容,项目分析需要包含哪些内容?
- mongodb使用场景 简书 mongodb+要用id
- mongodb管理系统 mongodb管理员登录
- as found记录分析
- 抓包后分析技术,icmp抓包分析
- tidb和MongoDB
- 数据分析软件免费,自动统计数据的软件
- 程序员做前端好还是后端好,前端和后端哪个好一点
- mongodb查询数据量 mongodb按月查询