永发信息网

关于指针的动态赋值问题

答案:3  悬赏:20  手机版
解决时间 2021-04-05 11:44
#include <iostream.h>
#include <stdio.h>
#include <math.h>
void main()
{

int i,j,k,nn,nmax,emax,inc,c; //k为节点循环 nn为新节点号 inc节点增加码
//读入节点信息
emax=10;
int *e;
e=new int;
FILE *E;
E=fopen("element.k","r");
for(i=0;i<=emax-1;i++)
{
for(j=0;j<=9;j++)
fscanf(E,"%ld \n",*(e[i]+j));
}
fclose(E);

FILE *NN;
NN=fopen("a.k","w");
for(i=0;i<=emax-1;i++)
{
for(j=0;j<=9;j++)
fprintf(NN,"%l, \n",*(*(e+i)+j));
}
fclose(NN);
delete e;
}

这个是我写的一个程序,指针是一个动态的int类型,我希望能把从element文件中读取的int类型数据赋值给指针,但是程序提示非法的间接引用。到底该如何操作呢?这里我不希望建立一个数组,因为element文件中的int数据的个数经常发生改变。希望得到您的回答
最佳答案
可以用标准模板类的vector list 等数据结构存储int类型,或者自己写个链表就可以,它们可以满足你未知元素个数的要求。你这样使用e,除了首个元素申请了空间,其他都不知道指针飞到哪里去了。这在系统里是不允许的,实际已经造成了访问越界。
简单修改如下(记得加头文件)

int e;
vector<int> ES;
FILE *E;
E=fopen("element.k","r");
for(i=0;i<=emax-1;i++)
{
for(j=0;j<=9;j++)
fscanf(E,"%ld \n",e);
ES.addElement(e);
}
fclose(E);

FILE *NN;
NN=fopen("a.k","w");
for(i=0;i<=emax-1;i++)
{
//vector可以像数组一样访问,仅仅是一维数组,当然你得保证下标正确。
for(j=0;j<=9;j++)
fprintf(NN,"%l, \n",ES[i+j]);
}
fclose(NN);
delete e;
}
全部回答
答案是d 这是 字符串初始化的一种方法 char *sp="right!"; 另外 char sp[]="right!"; 也可以。 a char *sp;*sp="right!"; 不对 sp是一个字符指针,然后再*sp就是一个字符的意思,它不可以赋值一个字符 串。 b char s[10];s="right!"; s是一个数组名,数组名不可以赋值。 c char s[10];*s="right!"; s是一个数组的首地址,它指向第一个元素。 所以*s就是s[0]它也是一个字符,不可以赋值为字符串。 其实赋值中,就是字符串赋值比较难。 你主要注意下 字符串的初始化的两种形式 char *sp="right!"; 另外 char sp[]="right!"; 也可以。 其他的如果不是初始化,纯赋值,主要是观察左右类型是否一致。 不能左边是一个字符或者一个指针,而右边是一个字符串常量。 希望对你有帮助。
#include <stdio.h> #include <string.h> void main() { int i = 0, j = 0, emax = 10; int *e = NULL; e = new int[10 * emax]; // 需要有足够的空间来存放数值,可以动态生成。 memset(e, 0, sizeof(int) * 10 * emax); FILE *E; E = fopen("element.k", "r"); if (E == 0) { return; } for(i=0; i <= emax-1; i++) { for(j=0; j<=9; j++) { // *(e[i]+j)) e[i]是一个值,e[i]+j还是一个值,对一个值取它所指向的值是会出错的。 if (fscanf(E,"%d", &(e[i * emax + j])) <=0 ) { break; } } } fclose(E); FILE *NN; NN=fopen("a.k","w"); if (NN == 0) { return; } for(i=0; i<=emax-1; i++) { for(j=0;j<=9;j++) { fprintf(NN,"%d,\n", e[i * emax + j]); // *(*(e+i)+j)) *(e+i)等同于e[i] } } fclose(NN); delete e; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我的QQ名字很没有个性,QQ名字叫心被上锁,想
爱心企业慰问交警标语,有没有人可以提供一些
新疆老年人穿里切克违法吗
如图所示,在长和宽分别是a、b的长方形纸片的
空调收氟了没有拆管 放开氟 能不能照常使用
起点月票榜有什么用,小说里的打赏月票是什么
怎样修改银行卡的预存的手机号
高衙内的描写在第几回
PET 3 与CET 4 有什么区别?
CD/DVD:P1-HL-DT-STDVDRAM GT32N 什么意
南京到义乌市多少公里
为什么dnf一到选择角色进入游戏的界面就自动
天津郊县的大巴,如蓟县静海武清宁河汉沽等,
完形填空(共20小题; 每小题1.5分,满分30分)
氯化铵溶液加温蒸发结晶,是否可以用烘干机直
推荐资讯
考驾驶证科二的时候可以抢语音吗
把0248这四个数字分别填在□里写成乘法算式1
手表复刻和真表有什么区别吗
科鲁兹只有右前玻璃升降能用 其他三个都不能
太原圣美发型烫头发怎么样?
老板生曰祝福语幽默,老板的生日祝福语,要一
包装系数表格怎么填?
如果你的情夫只想睡你而又不舍得为你花钱,甚
京剧中的白脸是什么,京剧中的花脸、白脸是什
三个石头是什么字
联通可以异地注销吗,中国联通卡不用了可以在
虞代表什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?