关于将二维数组放入所需类型为指针参数的函数会输出烫的问题?

#include
#include
#include
#define SIZE 3//不能加;

char *AAA(char *str);

int main()
{
char str[SIZE][30];
char ch;
printf("enter three stences\n");
for (int i = 0; i<3; i++)
fgets(str[i], 30, stdin);

ch = getchar();
getchar();
while (ch != 'q')
{
    switch (ch)
    {
    case 'a': AAA(str[SIZE]); break;

    default: printf("enter data error!\n"); break;

    }

    printf("Continue Or Enter 'q'to quit\n");
    ch = getchar();
    getchar();
}
system("pause");
return 0;

}

char *AAA(char *str)
{
for (int i = 0; i < SIZE; i++)
fputs(str++, stdout);
return 0;
}

如果函数是使用
char *AAA(char str[SIZE][30])
{

for (int i = 0; i < SIZE; i++)
fputs(str[i],stdout);
return 0;
}
则一切正常,而使用指针就会输出烫。
希望有人能指点一下原因,感激不尽!

3个回答

没说清楚你的题目是什么,输入是什么。
只能根据你有限的信息猜了。
你说
char *AAA(char str[SIZE][30])
{

for (int i = 0; i < SIZE; i++)
fputs(str[i],stdout);
return 0;
}
这个是可以的。
那么等价的,用指针的形式应该是
fputs(str, stdout);
str += 30;

qq_43304321
格里高利 就是输入三串字符串到一个二维数组,然后再用一个函数以这个二维数组为参数,将这三串再输出一次。
12 个月之前 回复

你定义的时候可以写str[SIZE]传的时候要指定小标(str[0]或str[1]或str[2])你写str[SIZE]直接越界了。我估计你是想把str整个二维数组传进去,那你要这么写

 char* AAA(char str[][30]){
 ...
 }
 //调用
 AAA(str);
JonathanYan
JonathanYan 回复: 定义和传值要区分开,就算你是用str[SIZE][30]定义的,传值的时候出现类似的写法基本上是错的。
12 个月之前 回复
JonathanYan
JonathanYan 回复: 对定义是可以,但是你传的时候写的是str[SIZE],也就是str[3],这个已经越界了。你其实是想把整个数组传进去,应该换个写法
12 个月之前 回复
qq_43304321
格里高利 直接定义 char str[]是可以的,不行的是上面那个 char * str ,因为书上说数组实际上就是指针,所以我想研究下...
12 个月之前 回复

在函数的输入参数中:数组实际上就是指针
首先你要理解一下
1. 参数是什么,对计算机来说,参数有两层意思:一是参数的值,而是参数的大小--->sizeof。比如,char *a, 那么a的值其实是一个地址,那a的大小sizeof(a)是1个byte。
2. 数组名是什么,数组名是比较特殊的东西。对于char str[SIZE][30];来说str的值等同与str[0],&str[0],&str[0][0],反正就是这个数组的第一个元素的地址,但是sizeof(str)== 30*3,sizeof(str[0])==30,sizeof(str[0][0])==1
理解了上述之后,在来理解函数中的输入参数为数组名的情况:
函数的输入参数为数组名的时候,会自动转换成指针,至于为什么会这么做,可能是在当时的架构中不好设计(转成指针就好做了,反正就是栈里面加一个4个bytes(32位)的变量就好了)。
所以结论是:
char *AAA(char a[30]) == char *AAA(char a[]) == char *AAA(char *a)
sizeof(a) == 4 (32位系统)

char *AAA(char str[SIZE][30]) == char *AAA(char str[][30]) == char *AAA(char (*str)[30])
sizeof(str) == 4 (32位系统)
你的需求应该就是用这个,调用的时候用AAA(str)即可

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
输出烫烫烫问题。。。。。。
输出烫烫烫问题。。。。。。在vc++6.0和c-free编译是有问题,在win-tc下没问题 rnrn代码如下:rn#includern#includern#includernint main(void)rn rn FILE *fp;rn char string[80];rn int i=0;rn if((fp=fopen("E:\\音乐\\succeed.txt","w"))==NULL)rn rn printf("can't open file");rn exit(1);rn rn while((string[i]=getchar())!='!')rn if(string[i]>='a'&&string[i]<='z') string[i]=string[i]-32;rn i++;rn fputs(string,fp);rn fputs("\n",fp);rn fclose(fp);rn return 0;rnrn就是输出地文件内容末尾出现了很多个“烫”,还有几个奇怪的字符。。那rnrn个零怎么不会被输出呢?跟内存有关系吗?
将excel数据放入二维数组
将excel内的数据一条一条放入二维数组中
关于函数的指针参数的调用的问题--》!
在现在的项目开发中,遇到这样的问题rnrn........rnrnCLass *p1=new CLass[100];//其实我不想定长rnmemset(p1,0,100*sizeof(CLass));rnclassfuc(p1);//调用函数CLASSFUC,通过指针返回值rn....................rndelete p1;rnrn//被调用的函数原型rnvoid classfuc(Class* p1)rnrn Class *pt=p1;rn //pt进行赋值rn .....rn 有可能要对PT+150进行赋值;但是P1的空间只有100,这里出现了问题??rnrnrnrn那位知道不永连表的方式,如何简单的解决上面的问题???
关于函数中指针参数问题
[code=c][/code#include rn#include rn#include rntypedef struct foo rn int i;rn char n[100];rn struct foo *l;rn struct foo *r;;rnrnN;rnvoid treep(N* p)rn if (p!=NULL)rn treep(p->l);rn printf("%4d %s\n",p->i,p->n);rn treep(p->r);rn rnrnvoid create(char *t,N* foo)rn if (foo==NULL)rn foo=(N *)malloc(sizeof(N));rn strcpy(foo->n,t);rn foo->i=1;rn foo->l=NULL;rn foo->r=NULL;rn rn else if (strcmp(t,foo->n))rn create(t,foo->r);rn rn else if (strcmp(t,foo->n)<0)rn create(t,foo->l);rn rn else rn foo->i++;rn rn return foo;rnrnint main(void)rnrn char t[100];rn gets(t);rn N* foo=NULL;rn while(strlen(t)>1)rn create(t,foo);rn //printf("%p\n",foo);测试用!rn memset(t,100,0);rn gets(t);rn rn treep(foo);rn return 0;rn]rn这个是个二叉树,我的问题是create(t,foo);中我将foo的指针作为参数,foo=(N *)malloc(sizeof(N));这句中不是已经将foo的值改变了吗?可是我在测试时发现foo还是NULLrn这是为什么!?rn
返回值为string类型的函数 --- 的输出问题。
程序如下:rn[code=C/C++]rn#include rnusing namespace std;rnrnclass Crnrnpublic:rn string toString()rn rn return "class C";rn rn;rnrnclass B:public Crnrnpublic:rn string toString()rn rn return "class B";rn rn;rnrnclass A: public Brnrnpublic:rn string toString()rn rn return "class A";rn rn;rnrnvoid displayObject(C x)rnrn cout << x.toString() <d:\mywork\whypolymorphismdemo\whypolymorphismdemo\filemain.cpp(33) : error C2679: 二进制“<<”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)
将二维数组输出
请问如何将二维的数组中内容在所建立的界面的编辑框中输出?rn谢谢
函数指针参数问题
这一则是关于函数指针参数的。我们经常犯下面这样的错误。 void getPointer(char *p) { p = (char *)malloc(100); memset(*p, 'a', 100); } int main() { char *p = nullptr; getPointer(p); printf(p); return 0...
关于将text类型的数据放入文本框
请问如何将text类型的数据放入文本框中,rn我用的是 <%=rs(0)%>
关于将txt中内容放入一个二维数组的问题
大家好!rn一开始我是将鼠标点击过的坐标保存在txt文本中,x,y坐标中间用逗号隔开,例12,34 txt中每行保存一组坐标。我现在想将这些坐标放入数组中,希望各位大哥大姐能给个完整代码,在此多谢了
函数的指针参数的问题
代码如下:rnrnfunction fun01:boolean;rnvarrn i:integer;rnbeginrn fun02(@i);rnend;rnrnfunction fun02(value:pointer):boolean;rnvarrn v:integer;rnbeginrn v:=123;rn value:=@v; //??????rnend;rnrn问题是 fun02 里 value:=@v 根本不执行,关闭Delphi的编译优化,虽然执行了,但是 fun01 里得不到结果。rnrnfun01 里的调用方法应该没有问题,fun02 以前是调用的DLL(内容未知),都可以正确执行。rnrn现在我自己要改写 fun02 的内容,而且函数 fun01 不能改动。请问应该怎么调用?多谢各位了。rnrn
关于将MYSQL_ROW类型的输出问题
如何将一个MYSQL_ROW ROW;的数据类型输出到我自己定义的一个数组?
输出字符数组的时候为什么会输出很多“烫”???
恳请大家指教,谢谢!
函数指针参数
声明了一个带参数的函数指针void(*ptr)(int s))rnrn现在调用的时候出现[C++ Error] Unit1.cpp(21): E2451 Undefined symbol 's'rn请问如何调用把参数传入函数func(int s)中?rn[code=C/C++]rnrnvoid caller(void(*ptr)(int s))rnrnrn ptr(s); /* 调用ptr指向的函数 */rnrnrnvoid func(int s)rnrn ShowMessage(IntToStr(s));rnrnrnint test()rnrnrn caller(func); /* 传递函数地址到调用者 */rnrn[code]
关于c++中函数的指针参数
我有一个方法,主要是创建两个链表:rnrn[code=C/C++]rnbool createCrossLink(node *longList,node *shortList,int crossNum)rn rn if(crossNum<0 || crossNum>=LONG_LENGTH) return false;rnrn node *temp;rn rn for(int i=LONG_LENGTH-1;i>=0;i--)rn node *lp = (node *)malloc(sizeof(node));rn lp->value = i;rn lp->next = longList->next;rn longList->next = lp;rn if(i==crossNum)rn temp = lp;rn rn rnrn for(int i=SHORT_LENGTH-1;i>=0;i--)rn node *sp = (node *)malloc(sizeof(node));rn sp->value = i*100;rn sp->next = shortList->next;rn shortList->next = sp;rn if(i==0)rn sp->next = temp;rn rn rnrn return true;rnrn[/code]rnrn但是在main中遍历这个链表,却发现没有创建。rn[code=C/C++]rnvoid traverse(node *ptr)rn if(ptr->next!=NULL)rn cout<value<next = NULL;rn shortHead->next = NULL;rnrn if(createCrossLink(longHead,shortHead,3))rn traverse(longHead);rn traverse(shortHead);rn rnrn return 0;rnrn[/code]rnrn请问如何解决?
关于类成员函数中函数指针参数的问题!!
请各位看看,以下代码为啥没法通过编译?rn rn #include rn#include rnrnusing namespace std;rnrnclass BaseArnrnpublic:rn BaseA()rn rn data=0;rn rnrn BaseA(int num)rn rn data=num;rn rnrn int Done(int(*Fun)(int))rn rn return Fun(data);rn rn rn int Test(int num)rn rn return (int)sqrt(num);rn rnrn int DDone()rn rn return Done(Test);rn rnrnprivate:rn int data;rn;rnrnint main()rnrn BaseA First(8);rn cout<
关于将程序界面输出为图形的问题
请教:在窗体上布置好控件并在代码窗口中写完代码后,请问能编辑代码将窗体界面输出为图形(如格式为.jpg或.bmpg)保存吗???如若此法不行,那怎么才能将窗体界面输出为图形呢(窗体上原来设计有很多各种控件)????万分感谢,望赐教!!!!!!
关于将文件输出为Excel的问题
Variant ExcelApp, WorkBook1, Sheet1;rn ExcelApp = Variant::CreateObject ("Excel.Application");rn ExcelApp.OlePropertySet("Visible",(Variant)true);rn WorkBook1 = ExcelApp.OlePropertyGet("WorkBooks");rn WorkBook1.OlePropertySet(问题);rn WorkBook1.OleFunction("add","F:\\yc.txt");rn rn yc.txt的每一行都包含有空格(例:序号 名字 使用),想以rn 空格为分隔符分列,既“序号”一列,“名字”一列,“使用”一列,rn 使用WorkBook1.OlePropertySet()是否能够能够完成?
求输出接口指针参数的函数的例子
如IDL文件中定义为rnHRESULT Point ([in] long index, [out, retval] IPoint ** point);rn//IPOINT为自定义的一个接口rnrn如何完成该函数。。。。
关于OnEraseBkGnd函数中CDC指针参数的问题
由于特殊原因,我重载了某对话框的OnEraseBkGnd函数,让它不执行CDialog::OnEraseBkGnd直接return TRUE。rnrn但是,在一个操作中,我需要调用CDialog::OnEraseBkGnd。并且需要传入一个CDC指针,我就CClient Dc(this),把dc的指针作为参数传进CDialog::OnEraseBkGnd中。rnrnrn结果是,并没有起到默认的CDialog::OnEraseBkGnd执行时的效果。我怀疑传入的dc参数不对。还望大侠解惑!
关于指针参数的问题!
int itemp = 5;rnrnint ReturnPointer(int *incom)rnrn incom = &itemp;rn return 1;rn rnrnint main(int argc, char* argv[])rnrn int itm;rn int *item;rn ReturnPointer(&itm);rn ReturnPointer(item);rnrn return 0;rnrnrn现在我想做的是从函数的参数中返回一个指向全局变量itemp的指针。 可以吗?rn上面两种调用方式哪种可以, 还是都不可以!rnrn
关于引用指针参数的问题
为什么 test(&i, &i); 会错?谢谢!rnrnvoid test(int*& i, int*& j)rnrn i = j;rnrnrnint main()rnrn int i = 0;rn int* j = &i;rn test(j, j);//test(&i, &i);rn return 0;rn
Python 二维数组输出为图片
对于二维数组,img_mask [[  0   0   0 ...,   7   7   7]  [  0   0   0 ...,   7   7   7]  [  0   0   0 ...,   7   7   7]  ...,   [266 266 266 ..., 253 253 253]  [266 266 266 ..., 253 253 253]  [266 266 266 .
怎样输出二维数组为图片?
如题。二维数组为布尔型。为TRUE时在那个位置上输出图片1,为FALSE时在那个位置上输出图片2rn要求保留数组的形状rnrn比如:rn二维数组是rntrue falsernfalse truern图片1是*rn图片2是#rn那么最后输出的图片就应该是rn*#rn#*
python二维数组输出为图像
最近参加kaggle-getstart级别的数字识别器比赛,通过以下代码,可以将一维数组变为二维数组,并输出为图像。import pandas as pd import numpy as np import matplotlib.pyplot as pyplot img_train = pd.read_csv('train.csv')#读取kaggle数据集,一维数组,代表28*28的图像 im
烫的问题
烫rnrn我用VC++,字符打印时总是出来“烫烫烫烫烫...”,rn我已经对它个数组zeromemory了,但是在字符最后老是出现。rnrn我在作CS程序时,当对方发送数据大小为1024时,我用128分多次去读,再把每次读取数据都打印出来,尾巴老是跟着“烫烫烫烫烫...”。rnrn怎么解决呢!rnrn高手帮忙啊!rnrn谢谢
关于递归调用的指针参数问题
刚开始学习c编程,对照《啊哈!算法》写了一下快速排序的小程序,但是在递归调用的时候,codeblocks报错,没想明白,大家帮忙看看!rn[code=c]rn#include rn#define N 10rnvoid quicksort(int left, int right, int *p);rnrnint main(void)rnrn int i;rn int integer[N]=6,1,5,2,9,10,8,7,4,3;rnrn quicksort(0,N-1,integer);rnrn for(i=0;i=temp&&j>i)rn j--;rn while(p[i]i)rn i++;rn if(i
关于指针参数的问题
void f(void *p)rn要调用这个函数rnint a=xxx;rnf(&a) 错误rnf((void *)a) 正确rn这是为什么,可以解释一下吗?
关于指针参数传值的问题。。。。。。
char shuzu[50];rnvoid fun1(char *str);rnrn//下面两种调用方式是否都可以?rnfun1(shuzu);rnfun1("helloworld");
关于指针参数(。。)问题
[code=C/C++]#include "stdio.h"rn#include rnrn void fun(float *p1, float *p2, float *s)rn rn s=( float * )calloc( 1, sizeof(float)); //heaprn *s=*p1 + *p2; rn rnrnrnint main(int argc, char* argv[])rnrn float a[]=1.1,2.2,b[]=3.3,4.4;rn float * s=a;rn fun(a, b, s);rn printf("%f\n",*s);rn return 0;rnrn[/code]rnrn调用fun()之后,s不是被悬挂了吗?怎么printf("%f\n",*s); s仍然指向a ??
关于指针参数返回的问题
有这么个函数rn[code=c]rnvoid funtion(char * pBuff)rnrn ......rnrn[/code]rnrn一下两种请况有啥区别,为什么参数是数组的时候没法返回值rn[code=c]rnchar a;rnfuntion(&a);rn[/code]rnrn[code=c]rnchar b[128];rnfuntion(b);rn[/code]
求教高手,一函数输出二维数组问题
一函数实现把一二维数组内元素输出rn代码如下:rn[code=C/C++]rn#include rnusing namespace std;rnvoid printArry(int** arry,const int n)rnrn for (int i=0;i
为什么输出的是"烫烫烫"?
我的程序是这样的,为什么输出的是"烫烫烫"?怎么解决?rnrnBOOL CEditEx::PreTranslateMessage(MSG* pMsg) rnrn // TODO: Add your specialized code here and/or call the base classrn if(pMsg->message==WM_CHAR)rn rn TCHAR c=(TCHAR)pMsg->wParam;rn if(c==VK_RETURN)rn rn TCHAR ch[10];rn int nindex=this->LineFromChar(-1);//当前行号rn int rear=this->LineLength(-1);//当前行字符个数rn BOOL m_success=0;rn if(rear)rn rn this->GetLine(nindex,ch);//取出当前行rn ch[rear]='\0';rn rn CString str=ch;rn MessageBox(str);rn rnrn
关于指针参数
[code=C/C++][/code]#include rnusing namespace std;rnvoid swap(int *,int *);rnint main()rnrn int *pointer1;rn int *pointer2;rn int a,b;rn cin>>a>>b;rn pointer1=&a;rn pointer2=&b;rn if(a
将二维数组传递到函数怎么做?
本人需要做一个二维fft的算法,打算编写一个函数,函数中要用到主程序中的二维数组,该数组的大小是未知的。rn请问如何传递参数,函数声明怎么写?
关于数组“烫烫烫。。。”的问题
[code=c]#includern#includernrnint main()rnrn char letter[80];rn int i=0;rnrn FILE *infile;rnrn infile=fopen("Das.txt","r");rnrn for(i=0;i<=5;i++)rn rn letter[i]=fgetc(infile); rn rnrn rn printf("%s",letter);rn return 0;rnrn[/code]rn最近在学数据文件那块,我往工作区间哪里放了一个Das.txt的文件,里面有几个字母。rn然后用这个程序运行,发现出现一堆输出那6个字符,再加上烫烫烫.。。。。。rn好像是什么数组没有初始化的问题吗? 我如果把那个数组声明那改成 char letter[80]=0 问题就消失了。 怎么回事?
关于函数输出的问题
偶比较笨啦,写一个函数想返回多个参数,但是怎么都不可以.rnfunction test(str1:string;var str2,str3:string):string;rnbeginrn result:=str1;rn str2:=str1+'test1';rn str3:=str1+'test2';rnend;rn偶在调用后,想得到str3的值.就是得不到.但是str2就可以得到.
C++中怎么将一维数组输出为二维数组
比如:在C++中,有一个数组a[]=1,2,3,4,5.......100;rn现在我想将其输出为一个固定长度的二维数组,比如5×20的rnb[1][20]=1,2,3,4,5.....20rnb[2][20]=21,22,23,24,....30rn.....rnb[5][20]=81,82,83,84......100rnrn请问用C++语言怎么实现,我是个小白,请各位大神帮帮我,比较急。非常感谢。
关于函数类型的问题
有如下的函数定义:rnstring(*fontget)(string * a);rn请问是什么含义?
调用形参为二维数组的函数
动态创建指针数组,将指针数组作为实参调用形参为二维数组的函数。
memset函数为二维数组初始化
1int* a;  a = new int[10]; sizeof(a) 只会返回出来指针的大小,所以我们只能自己计算这个数组的长度,这里应当是sizeof(int) * 10, 因为数组里面有10个int所以应该,memset(a, 0, sizeof(int)*10);//将a数组初始化为02 int **p;//开一个n*m的数组 p = new int*[n]; for (int i = ...
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件