展开全部
1、打开visual studio,创建一个控制台应用程序,用于演示指针的使用、赋值和取值。
2、在Main方法中,添加一个unsafe代码段,C#语法中的指针都需要放在这个代码段中。
3、定义一个指针变量,与定义普通变量唯一的区别就是在变量的类型后面加上一个星号。例如:定义一个整型指针变量p,定义形式如下:
int* p;
4、如果像普通变量一样直接赋值10,从代码效果可以看出,这样是不被允许的,编译器直接报错。
5、那么,另外定义一个普通变量,例如:int x = 100。
6、使用&符号在变量前面,就表示获取这个变量的内存地址。这个时候就可以复制给指针了。例如:将整型变量x的地址赋值给指针p:
p = &x。
7、在指针变量前面加一个星号,表示获取这个指针指向的地址中的值。例如想要输出指针p的值,就使用 *p 即可。
展开全部
指针其实就是内存地址。
使用指针可以深入硬件底层。
可以用&运算符将变量的地址取出。赋予指针。int a=5,int* p=&a;
数组中,数组名表示数组的起始地址。因此可以将数组名赋予指针。int arry[50];int* p=array;
还有动态分配内存时。int* p=new int[50],classA *p=new ClassA();也是在运行时堆中分配指定大小的内存块。并把内存块起始地址赋予指针变量p.
简单的应用就是这样。
复杂的指针应用比如函数指针等。说白了还是地址。用来实现类似于C#委托功能。用久了自然会清晰了。
在指针的运算中。编译器会自动计算地址增加量。
比如针对 p++后;
int型的指针的值:当前地址+sizeof(int)。内存是按字节编址的。
classA类型的指针的值:当前地址+sizeof(classA)。
对其解引用后*p指向的就是下一个元素的值。比如对于数组指针。*array=array[0]
*(array+1)=array[1];
使用指针可以深入硬件底层。
可以用&运算符将变量的地址取出。赋予指针。int a=5,int* p=&a;
数组中,数组名表示数组的起始地址。因此可以将数组名赋予指针。int arry[50];int* p=array;
还有动态分配内存时。int* p=new int[50],classA *p=new ClassA();也是在运行时堆中分配指定大小的内存块。并把内存块起始地址赋予指针变量p.
简单的应用就是这样。
复杂的指针应用比如函数指针等。说白了还是地址。用来实现类似于C#委托功能。用久了自然会清晰了。
在指针的运算中。编译器会自动计算地址增加量。
比如针对 p++后;
int型的指针的值:当前地址+sizeof(int)。内存是按字节编址的。
classA类型的指针的值:当前地址+sizeof(classA)。
对其解引用后*p指向的就是下一个元素的值。比如对于数组指针。*array=array[0]
*(array+1)=array[1];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要改p–>a的值,和在这个函数里面是一样的
直接
p–>a=要赋值的值
这样就可以了
唯一需要注意的就是要赋值的是结构体指针还是结构体变量,如果不是指针那就要改成点了
p.a这样
直接
p–>a=要赋值的值
这样就可以了
唯一需要注意的就是要赋值的是结构体指针还是结构体变量,如果不是指针那就要改成点了
p.a这样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不建议从键盘输入一个值直接复制给指针变量。因为如果让用户自己从键盘输入一个值给指针,就形成了野指针,野指针的不当使用会带来严重的后果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
main()
{int *a,b;
//-----------第一种
scanf("%d",&b);
*a=b;
//----------第二种
scanf("%d",*a);
}
main()
{int *a,b;
//-----------第一种
scanf("%d",&b);
*a=b;
//----------第二种
scanf("%d",*a);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询