【扩展知识2】函数strlen()和非函数sizeof的使用

【扩展知识2】函数strlen()和非函数sizeof的使用

【扩展目录】

  1. strlen函数
  2. sizeof

( 1 )函数strlen()

原型:size_tstrlen ( const char * str );

返回C字符串(仅仅支持此类型)的长度。

//strlen()的使用

#include <stdio.h>

int main( void )
{
         chararray[ ]= "zhijiandeweixiao"; //指尖的微笑

         //array为数组的首个地址
         printf("%s的长度为%d\n", array, strlen( array ) );

   return 0;
}

( 2 )非函数sizeof的使用

有时候我们要求int型数组的元素。

如int array[ ]= { 1,2,3, 4, 5, 6….};个数少时可以数,但是当个数特多时,我们就得交给计算机算了。但是在strlen只仅算字符串的个数。要为能数int型或float型数组的个数,就得自己开动脑子了。

有效方法如下:

//非函数sizeof的使用
#include <stdio.h>

int main( void )
{
         intnum;
         intarray[]= { 1, 2, 3, 4, 5, 6, 7 };

         //sizeof(array )== 28 个字节
         //sizeof( array[ 0 ] )== 4 个字节
         //所以sizeof(array )/ sizeof( array[ 0 ] )== 7,即数组元素个数

         num=sizeof( array )/ sizeof( array[ 0 ] );

         printf("sizeof( array )= %d\n", sizeof( array ) );
         printf("sizeof( array[ 0 ] )= %d\n", sizeof( array[ 0 ] ) );
         printf("sizeof( array )/ sizeof( array[ 0 ] )= %d\n", num );

   return 0;
}

注意事项:

  1. sizeof不能计算动态分配的数组大小!
  2. 当把数组作为函数的参数时,你无法在程序运行时通过数组参数本身告诉函数该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。
//非函数sizeof的使用2
#include <stdio.h>

int main( void )
{
         intnum;
         intarray[]= { 1, 2, 3, 4, 5, 6, 7 };

         //array为数组首地址
         //array为数组首元素的首地址
         //sizeof(array )== 28 个字节
         //sizeof( array[ 0 ] )== 4 个字节
         //所以sizeof(array )/ sizeof( array[ 0 ] )== 7,即数组元素个数

         num=sizeof( array )/ sizeof( array[ 0 ] );

         printf("sizeof( array )= %d\n", sizeof( array ) );
         printf("sizeof( array[ 0 ] )= %d\n", sizeof( array[ 0 ] ) );
         printf("sizeof( array )/ sizeof( array[ 0 ] )= %d\n", num );

   return 0;
}

运行结果:

sizeof( array )= 28

sizeof( array[ 0 ] )= 4

sizeof( array )/ sizeof(array[ 0 ] )= 7

//非函数sizeof的使用2
#include <stdio.h>

void print( int array[] )
{
  int num;

  num= sizeof( array )/ sizeof( array[ 0 ] );

  printf( "num= %d\n", num );

  return ;
}

int main( void )
{
         intarray[]= { 1, 2, 3, 4, 5, 6, 7 };

         print(array );

   return 0;
}

运行结果:

num= 1

有结果可知: 当把数组作为函数的参数时,数组参数相当于指向该数组第一个元素的指针,所以的大小为1,即首元素。

【指尖的微笑】错误在所难免,希望得到大家的指正^-^

转载时保留原文的链接http://codingit.howbbs.com和http://blog.csdn.net/mirrorsbeyourself

时间: 2024-08-02 20:08:08

【扩展知识2】函数strlen()和非函数sizeof的使用的相关文章

【扩展知识2】学习一些重要的知识

[扩展知识二]学习一些重要的知识 [扩展目录] 1.      布尔型,浮点型.指针的变量与0值得比较 2.      类型转换 3.      关键字sizeof和strlen()函数 A:bool变量与0值得比较 布尔型,用于表示布尔值,即逻辑值TRUE(真)和FALSE (假).在C语言中非零即为真,零就为假. 较合理的写法是: //测试环境:win7_32+VC++6.0.有的编译器可能不识bool //bool变量与0,1的比较 #include <stdio.h> int main

php基础知识总结(3)字符串函数string

一.大小写转换 1.strtolower()--转换为小写. echo strtolower("Hello WORLD!"); //hello world! 2.strtoupper()--转换为大写. echo strtoupper("Hello WORLD!"); //HELLO WORLD! 3.ucfirst()--把首字母转换为大写. echo ucfirst("hello world");     //Hello world 4.uc

逆向知识十一讲,识别函数的调用约定,函数参数,函数返回值.

逆向知识十一讲,识别函数的调用约定,函数参数,函数返回值. 在反汇编中,我们常常的会看到各种的函数调用,或者通过逆向的手段,单独的使用这个函数,那么此时,我们就需要认识一下怎么识别函数了. 一丶识别__cdecl 函数(俗称C Call),函数参数,函数返回值 首先写一个C Call的函数 1.返回值 int类型, 参数int 类型 高级代码: int __cdecl MyAdd(int a,int b) { return a + b; } int main(int argc, char* ar

编程题:函数strlen()的使用

#include<stdio.h> #include<string.h> void main() { int i; char str1[20],str2[20]; gets(str1);gets(str2); for(i=0;str2[i]!='\0';i++); printf("%s:%d\n",str1,strlen(str1)); printf("%s:%d\n",str2,i); printf("%s:%d\n",

[C/C++基础] C语言常用函数strlen的使用方法

函数声明:extern unsigned int strlen(char *s); 所属函数库:<string.h> 功能:返回s所指的字符串的长度,其中字符串必须以'\0'结尾 参数:s为字符串的初始地址 使用举例: 代码如下 编译运行结果 说明: 函数strlen比较容易理解,其功能和sizeof很容易混淆.其中sizeof指的是字符串声明后占用的内存长度,它就是一个操作符,不是函数:而strlen则是一个函数,它从第一个字节开始往后数,直到遇见了'\0',则停止. [C/C++基础] C

【编程题目】请修改 append 函数,利用这个函数实现两个非降序链表的并集

42.请修改 append 函数,利用这个函数实现(链表):两个非降序链表的并集,1->2->3 和 2->3->5 并为 1->2->3->5另外只能输出结果,不能修改两个链表的数据. 感觉网上理解题意略有不同,我理解的题意: 只是输出最后的结果,不用生成一个新的链表,也不修改原有链表. 给的数据非降序就是 1 1 2 2 3 这样可以有重复数字的递增 输出时,不显示重复的数字. 基于这些理解,题目不难,代码如下: /* 42.请修改 append 函数,利用这

PHP字符串截取函数strlen和mb_strlen的区别

PHP字符串截取函数strlen和mb_strlen的区别,php教程中常见的计算字符串长度的函数有: strlen和mb_strlen.当字符全是英文字符的时候,两者是一样.这里主要比较一下,中英文混排的时候,两个计算结果. 在PHP中,strlen与mb_strlen是求字符串长度的函数. 两者之间的区别.例子: <?php //测试时文件的编码方式要是UTF8 $str='中文a字1符'; echo strlen($str).'<br>';//14 echo mb_strlen($

php基础知识总结(4)时间函数date

一.time() -- 返回当前的 Unix 时间戳 $nextWeek = time() + (7 * 24 * 60 * 60); echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n"; 二.mktime(时/分/秒/月/天/年) -- 取得一个日期的 Unix 时间戳 echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));  //Jan-01-1998 echo da

C++静态成员函数不能调用非静态成员变量

其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话 因为无论是静态成员函数还是静态成员变量,它们都是在类的范畴之类的,及在 类的整个生存周期里始终只能存在一份.然而非静态成员变量和非静态成员函数 是针对类的对象而言. 然而从本质上来说类的静态成员函数的函数形参中没有默认的this指针,导致不能 调用具体实例对象的成员. 下面我们来测试一下: 先在静态成员函数中调用静态成员变量: 1 #include <iostream> 2 using namespace std; 3 4