关於C语言中POINTER 请高手作答 小女跪谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关於C语言中POINTER 请高手作答 小女跪谢相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdlib.h>

int main (void)

int *numptr;
int num;

numptr=(int *)99;

*numptr=1234124/2;

printf("Numptr indirection= %d\n",*numptr);
printf("Num address =%p\n",numptr);
return 0;


这个是书上的例子
但是我自己输入到VISUAL STUDIO 2005就不能运行
DEBUG也查不出错 就是类似程序突然不好用了 出现窗口是 THIS PROGRAM IS STOP WORKING , WINDOWS IS CHECKING……
(PS 我是 正版系统 正版程序)
其实我最主要的我问题是

关於POINTER 的一个用法
基本就是
int *numptr;
numptr=(float *)100;
我明白他讲的是怎麼回事 但是希望有高人说明下原理 因为教科书是英文的 我理解书上的意思是 计算机(比如说)有64,000;字节的内存, 比如说第一百个字节内存的地址是098FF129C, 那麼根据上面的代码 就是把 这个地址存入到numptr裏面 加上(float *) 是说这个地址098FF129C存储的十一个有小数点的书 对吧

谢谢

1.
numptr=(int *)99;
*numptr=1234124/2;
这段代码,是让指针numptr指向内存地址为99的内存空间,并将这一内存空间赋值成1234124/2。语法没有错,但实际上时运行不了的,因为内存地址为99的内存空间是不允许用户修改的。
2.
int *numptr;
numptr=(float *)100
跟上面同样的道理,让指针numptr指向内存地址为100的内存空间,不过语法应该是错了,int* 怎么能被强制转换为(float*)。
3.
不要这样指定地址值给指针,很危险的,有可能会向99这种值,不允许修改,有可能会改掉你不希望改掉的值。
4.
这是哪本书啊,给的例子这么汗。。。
参考技术A *numptr=(int *)99;

这是干什么

numptr是一个 int 指针变量,强行指向地址 99
这个地址是哪里,知道吗
这样根本不是实现在基地址的基础上,读取某一个偏移量对应位置的值
因为没有指定基地址

如果希望程序出现错误甚至崩溃就这样写,否则千万不要这样做
参考技术B numptr=(int *)99;
这句话是指
把内存地址为99的内存单元内存放的地址 强制转换成 指向一个int变量的指针numptr
*numptr=1234124/2;
这句是把 1234124/2存放到 numptr指向的地址

你可以把这里的 99 理解成一个 void* 型的通用指针
然后在使用通用指针前要对通用指针进行类型定义

在机器上跑不起来的原因可能是因为 99那个内存地址不可引用~
参考技术C numptr=(int *)99;
自己指定一个地址值给指针是很危险的做法
因为你无法知道指定的这个地址是否可用
参考技术D numptr=(int *)99; 改成numptr=(int *)malloc(sizeof(int)*99);头文件加#include <malloc.h>

以上是关于关於C语言中POINTER 请高手作答 小女跪谢的主要内容,如果未能解决你的问题,请参考以下文章

simulink 转换成c语言

关於在ABAP中的SELECT语句的一种用法的请教。

C语言文件操作,请高手指点

c语言怎么启动vbs脚本不弹出黑窗口呢,跪谢?

C语言高手请进

高分悬赏,c语言高手请进