c语言中指针怎么使用?
1、使用场景使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:#include#includeintmain(intargc,charconst*argv[]){inta[5]={0,1,2,3,4};int*b,*d;intc=2;int*e=a;//e指向a数组首地址//*b=2; 无法直接初始化//printf("%d\n",*b);e=e+2; //移动两个地址单元d=&c; //d指向c的地址来表示值c=4; //修改原c变量的值,d指针的值会发生改变b=(int*)malloc(sizeof(int));//为b分配一个int型空间来直接存储值*b=2;//分配空间后可以直接赋值了printf("thisise,b,c,d:%d%d%d%d\n",*e,*b,c,*d);2、类型说明(1)int*a:表示一个指向int型变量的指针,指向的是变量的地址单元(2)char*b:表示一个指向char变量的指针*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:intnums[5]={0,1,2,3,4};int*a=nums;printf("%d%d%p\n",*a,*(a+1),a);扩展资料:指针的运算指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。intnums[5]={0,1,2,3,4};int*a=nums;(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。intnums[5]={0,1,2,3,4};int*a=nums;a=a+2;printf("%d\n",*a);结果输出2。 参考资料来源:指针-百度百科
c语言函数指针的作用。
C语言中函数指针与普通指针没什么差别,只是指向的内容不同而已。主要作用:1、实现面向对象编程中的多态性。2、回调函数。函数指针是指向函数的指针变量。因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
C语言中的指针到底有什么用
所有变量值保存在内存中,而每个内存都有一个地址,所谓地址就是一个整数编号,如同门牌号码用于定位(专业术语叫寻址),一个地址对应一个字节(8bit)的内存单元。
如今的编译器,一个整数int类型的值占用32位bit,也就是4字节,编译器将第一个字节的编号定义为该整数的地址,由于保存地址的变量就像一个箭头指向某地址,而称为指针变量。
int a =10; //定义一个整数变量a,对其赋值10
int *p =&a;//定义一个指针变量p,对其赋值a的内存地址,&符号意思为引用跟随其后的变量地址。
cout <<a<<endl; //输出 a的值:10
cout << p << endl ;// 输出p的值:XXXXX 其实为a的地址,该地址由编译器和运行时确定。
cout << *p <<endl; //输出p指向的地址中的值:10,也就是a的值,*星号放在变量前面意思就是取该变量中的地址所指内存中的值。
读取过程为:p的值(a的地址)->寻址->取值
由于指针是一个变量的首个字节的地址,所以要告诉编译器被指地址包含连续多少个字节,因此指针也有类型。比如上面例子中声明了p指针是个整数指针,这样编译器知道p指向一个4字节的内存块。
你可以将指针变量看做一般的整数变量来理解,用来保存一个整数(地址是个整数),只是,该整数代表着某地址,在这里是a的地址。
在C/C++中很灵活,但是也很危险,也很难学,如果指针指向错误的地址会引起程序崩溃,因此在C#中已经被微软封装了,但内部还是有指针的。
如果有必要,C#中也可以使用指针,使用非安全代码,在项目生成选项卡中勾选“允许非安全代码”,然后就可以使用指针了,不过不建议这么做。
unsafe
{
int a = 10;
int* p=&a;
}