c语言赋值地址内容函数 c语言地址运算符( 二 )


int * py ;
py=x ; //单独赋值,将py指向x
*py=10 ; //这里的*,是引用指针中的数据操作符 , *跟随的变量必须是指针类型变量,否则会出错!*py就是x , 这里相当于x=10;
2、指针变量作为函数的参数时 , 子函数可以通过指针引用实参地址中的数据,达到修改实参地址中的数据 。如:
#include stdio.h
void func( int a, int b, int *pmax )
{
if ( ab ) *pmax=a;
else *pmax=b ;
}
void main()
{
int a=2,b=3,max=0;
func(a,b,max ); //这里将变量max的地址传递到子函数,子函数中通过该地址 , 可以修改max的值,达到子函数结束后,max能带回运算结果的效果 。
printf("max=%d\n", max );
}
关于C语言中给绝对地址的赋值问题您说的应该是对的,用VC的话前面那条语句是编译不通过的 。
补充啊,谈点个人看法:
虽然在VC上面编译不能通过(unsigned int *)0x100000 = 0x3322语句,但是个人认为这条语句与*((unsigned int *)0x100000) = 0x3322所表达的含义是不同的 。前者是对指针赋值,后者是对指针所指向的对象赋值 。
1. 从变量的定义出发 , 变量是地址空间的别名,也即例如unsigned int *a表示给一个存储空间命名为a同时这个空间是一个地址指针,假设这个存储空间的地址为0x100000,那么此时a即是地址0x100000单元的别名,对a赋值即是对0x100000所标识的空间赋值 。因此(unsigned int *)0x100000 = 0x3322赋值的空间是0x100000 。
2. 对于*((unsigned int *)0x100000) = 0x3322语句,也即相当于*a = 0x3322,也即是a所指向的空间被赋值 。也即是先取出0x100000地址空间的值作为地址找到对应的存储空间然后存储0x3322 。
个人的一点浅见,不知道是否符合真实情况 。
c语言赋值地址内容函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言地址运算符、c语言赋值地址内容函数的信息别忘了在本站进行查找喔 。

推荐阅读