#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数据的个数经常发生改变。希望得到您的回答
关于指针的动态赋值问题
答案:3 悬赏:20 手机版
解决时间 2021-04-05 11:44
- 提问者网友:我们很暧昧
- 2021-04-04 15:19
最佳答案
- 五星知识达人网友:英雄的欲望
- 2021-04-04 16:25
可以用标准模板类的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;
}
简单修改如下(记得加头文件)
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;
}
全部回答
- 1楼网友:轮獄道
- 2021-04-04 18:06
答案是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!";
也可以。
其他的如果不是初始化,纯赋值,主要是观察左右类型是否一致。
不能左边是一个字符或者一个指针,而右边是一个字符串常量。
希望对你有帮助。
- 2楼网友:梦中风几里
- 2021-04-04 17:11
#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;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯