三九宝宝网宝宝教育教学论文

c语言字符数组字符指针 sizeof strlen的区别

02月13日 编辑 39baobao.com

[编写一个函数求数组中的最大值及下标]给,都已经改好了,具体的请看注释: int y_max(int *p,int n) { int max=*p,i,k=0; for(i=0;i{ if(max{ k=i; max=*(p+i);////记得要在这里更新一下max的记录 } } return k; } #de...+阅读

sizeof()操作符返回对象/类型所占空间大小(字节为单位),类型为size_t(看头文件可以知道就是int,只不过被typedef了一下标示用途而已)。常见用法有sizeof(变量)和sizeof(类型),具体实例代码有很多,可以自行搜索。 这个返回值的大小并不一定是对象的内容所占的空间。基于效率方面考虑,存在编译对齐这一行为,对于结构体来说,成员分布不一定连续,sizeof()的结果往往大于本身各个数据成员sizeof()返回值之和。

(数组是连续存放的,通常编译器通常不对数组实施对齐,所以这里不需要考虑这点。) strlen是从参数给定的内存地址开始判断该地址上对应的char值是否为0,如果不是则继续判断下一个,最后返回非0字节的个数,所以不只适用于字符串。不过对于非字符串,由于字符串结束符0存在的不确定,所以不一定能得到结果,有可能会因为访问到被系统保护禁止读取的内存区段导致程序崩溃。

sizeof(c):4,strlen(c):6。 c为指针,sizeof结果和sizeof(int)相同(32位系统中为4)。 c指向了长度为6的字符串字面量,所以strlen(c)返回6。 sizeof(d):7,strlen(d):6。 d是char[]数组,初始化中可以确定它的类型是char[7],每个元素(char型)占1个字节,所以共7字节。strlen理由同上。 注意初始化列表中的两个双引号之间的字符串字面量填充到数组中时,会自动在最后补0。

sizeof(e):6,strlen(e)。 由初始化可见e是char[6]型的。 strlen(e)理论上来说是不确定的。如果LZ给的代码放在函数体内,定义的是自动变量,这里以字符串形式输出e可以发现后面有d的内容。(不是 GhostWzf 说的“自动分配”,LZ可以自己改变d的内容然后再输出看看。)原因是C实现过程中,自动变量存储在栈空间上,内存是高内存地址向低内存地址分配的。

所以可以通过之前定义的变量来估计可能的结果。但是实际一般不会用这种方法,变数太多(例如受到对齐设置的影响)。相对而言,strlen作用于非字符串,结果无法预料,本身就是错误的(非语法错误,是语义错误/逻辑错误),所以,结果无法预料。 ---- [原创回答团]

以下为关联文档:

从键盘输入10个整数存入整型数组中输出该数组中的最大值及其下#include<stdio.h> int main() {int a[10],i,*p=a,*q=a; for(i=0;i<10;p++,i++) {scanf("%d",p); if(*p>*q)q=p; } printf("Max=a[%d]=%d\n",q-a,*q); getch(); return 0; }...

C语言数组下标问题#include <stdio.h> #include <stdlib.h> int main() { int *p=(int *)malloc(sizeof(int));//p相当于数组使用 int count=0; int i=0; int temp=0; printf("请输入数据(0表示...

求助C程序编程题目:编程找出一维数组中值为最大的元素和此元素的确是很简单的,别人给了代码也要自己看会`~然后再自己重新写次。 #include void main() {int n,a[100],max,xiabiao,i; printf("你要输入几个数字:\n"); scanf("%d",&n); printf("请...

用C语言输入字符判断大小写C语言输入字符判断大小写的源代码如下: #include <stdio.h> int main() { char c; printf("输入一个字符: "); scanf("%c",&c); if( (c>='a' & c<='z') || (c>='A' & c<='Z')) printf...

c语言输入字符串判断有几个大写字母小写字母有几个数字和其他的"getchar 只能获取一个字符"这种说法是正确的但是,如果用循环,那么就可以读取多个字符到一个数组中所以原来程序中的:while((a[i]=getchar())!='\n') i++; 是没有错误的,而且原来...

c语言设计程序判断输入的是大写或小写字母或其他字符#include<stdio.h> main() { char ch ; printf("从键盘输入一个字符\n"); ch=getchar(); if(97<=ch & ch<=122) { printf("该字符为小写字母"); putchar('\n'); } else if(65<=ch & c...

C语言怎么用switch语句判断输入的字符是大写字母小写字母还是数字如果你确定字符不是大写字母就是小写字母,而没有其他字符的话,倒是能用switch解决 #include <stdio.h> #include <stdlib.h> int main() { char ch; printf("please input a le...

用c语言中递归调用的方法编写实现:输入的一行字符逆序输出#include <stdio.h> void reverse(char *s) { if (*s) { reverse(s+1); putchar(*s); } } void main() { char a[256]; gets(a); reverse(a); printf("\n"); }...

C语言的指针数组# includevoid main() { void exchange(char *name[],int n); char * name[]={"January","February","March","April","May","June","July","August","September","October","November","December"};...

推荐阅读
图文推荐