void Func ( char str[100]) { 请计算 sizeof( str ) = 4 (2分) } 为什么是4捏

作者&投稿:年使 (若有异议请与网页底部的电邮联系)
void Func ( char str[100] ) {  sizeof( str ) = 4 } 为什么是等于4,如果没有函数直接char str[100];~

在C/C++里数组作为参数时传递的实际上是指向数组第一个元素的指针,因此sizeof(str)返回的是指针的大小,即4。

注意以下三种形式的参数是完全等价的:
void Func(char str[100]);void Func(char str[]);void Func(char *str);因为传递的本质上是指针,所以维数也是不必要的。以下调用是完全合法的:
void Func(char str[100]);char ch[10];Func(ch);

这个与你的环境有关。
首先说明一下:我的编译环境,指针长为4、int型长为4(TC下int为2)

void Func ( char str[100])
{
sizeof( str ) = 100 //数组的长度就是每个元素的长度之和
}

char str[] = “Hello” ;
char *p = str ;
int n = 10;
sizeof (str ) = 6 //理由同上,加上后面的\0
sizeof ( p ) = 4 //p只是个指针,就是指针的长度
sizeof ( n ) = 4 //int型的长度

void *p = malloc( 100 );
sizeof ( p ) = 4 //就算malloc,也是指针,仍然只是4

.对于函数参数列表中的以数组类型书写的形式参数,编译器把其解释为普通
的指针类型,即char *str

因为是func()是一个函数,所有传递只是str数组的首地址。

应该是100吧,你确定在程序上运行是4?

对于指针来说,如果你的机器是32位的,那么他的地址就是32位的,就是4个字节


古田县18587751436: 编写一个函数:void Func(char *strl,char *str2,char *str3) -
冯薇芙新: 可能不是最好的实现方法,但测试通过,可行.#include <stdio.h>#include <string.h> void Func(char* str1,char* str2,char* str3) { int i,j,k=0; for(i=0;i<strlen(str1);i++) { for(j=0;j<strlen(str2);j++) { if(str1[i]==str2[j]) break; }if(j==strlen(str2)) { str3[k]=str1[i]...

古田县18587751436: 如何从函数中返回字符串 -
冯薇芙新: C语言中实现函数返回字符串,首先要确定函数返回的字符串地址的来源,一般分为四种方式:1. 函数形参带进来的地址 2. 静态局部变量地址 3. 局部变量地址,必须在函数中用malloc()函数进行地址分配 4. 采用全局变量地址 参考代码: ...

古田县18587751436: c语言菜鸟指针传递 问题 void func(char **p) {} int main(void -
冯薇芙新: p被赋值的是char* p的地址!你把char* 理解为一个变量就好理解了,就好比char a;char是变量类型,a是变量.既然是变量它就有地址,所以p也有地址,char **p,可以看成是 char* (*p)所以char** 被传的值是存放地址的变量的地址! 我不知道这样说你听不听的懂,指针是c语言的灵魂,学好指针能给你带来很多的方便! 加油吧! 骚年!!

古田县18587751436: 编写一个函数,由实参传来一个字符,统计此字符串中的字母,数字,空格和其他字符的个数 -
冯薇芙新: void func(char s[]){ int i=0,l=0,s=0,n=0,o=0; while(s[i]){ if (s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z') l++; else if (s[i]>='0' && s[i]<='9') n++; else if (s[i]==32 || s[i]==9) s++; else o++; i++; } printf("参数传来的字符串是:%s\n字符串有%d个字符,其中有字母%d个,数字%d个,空格%d个,其它%d个\n",s,i,l,n,s,o); }

古田县18587751436: c语言中的数组的退化成指针 -
冯薇芙新: 退化成指针的意思就是丢失了长度信息,只保留了地址 例如:void func(char *str){//这里只接受到地址,丢失了s数组的长度信息.} main() { char s[10] = "xxxxxxxxx"; func(s); }

古田县18587751436: c语言求字节长度 -
冯薇芙新: 等于4.在这里char数组作为参数的话,只能当做char*型,也就是指针类型,而一个指针占4个字节.所以sizeof(str)=4.

古田县18587751436: 编写函数void fun(char s[],int c) -
冯薇芙新: Windows XP+VC++6.0下编译通过并正常运行#include<iostream> #include<cstdio> using namespace std;void fun(char s[],int c) {int len=strlen(s);int k=0;for(int i=0;i<len;i++){if(s[i]!=static_cast<char>(c))//或if(s[i]!=c){s[k]=s[i];k++;}}s[k]...

古田县18587751436: char(void)是不是等于char()??? -
冯薇芙新: char作为一个变量类型如果当作函数用会编译不过的知道不,举函数名的例子请不要随意用关键字,那样很容易误解 char (void) 和 char () 是等价的 但是 void char() 和 char() 不等价,因为默认的返回值是int而不是void

古田县18587751436: C++ 函数怎么返回string -
冯薇芙新: 让一个函数返回字符串,让主函数接收使用,有几种方法:1.通过函数的参数指定一个指针,然后在函数体内对指针赋值. 如:char temp[10]; void func(char *t) {strcpy(t, "test"); } func(temp);即可2.通过返回值 如:char* func() {char *temp = new char[5];strcpy(temp, "test");return temp; }char *me=func();即可

古田县18587751436: C语言程序编写:编写程序,删除字符串中的所有空格并输出 -
冯薇芙新:#include <stdio.h> void func(char *s, char c) { int i=0,j=0, f=0; while(s[i] != '\0') { if(s[i] == c) { j=0; while(s[i+j] != '\0') { s[i+j]=s[i+j+1]; j++; } f=1; } else { f=0; } if(!f) i++; } s[i] = '\0';} int main() { char s[100]; gets(s); func(s, ' '); printf("%s" , s); return 0;}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网