设为首页 加入收藏

TOP

c语言笔记第一天:标识符,数据类型,sizeof和strlen区别及面试题(一)
2017-07-20 10:22:44 】 浏览:4004
Tags:语言 笔记 第一 标识 数据 类型 sizeof strlen 区别 试题

c语言笔记第一天:标识符,数据类型,sizeof和strlen区别及面试题。

1.所谓标识符,就是你起的一个名字。c/c++中,是你用来标识变量名、符号常量名、函数名、数组名、文件名、类名、对象名等的。(就好像你父母有了你以后给你起的名字)~~ c/c++有效标识符的构成规则如下

(1)第一个字符必须是字母(不分大小写)或下划线(_);

(2)后跟字母(不分大小写)、下划线(_)或数字组成;

(3)标识符中的大小写字母有区别。如,变量sum,sum,sum代表三个不同的变量;

(4)不能与c编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名。比如,不能将标识符命名为float,auto,break,case,this,try,for,while,int,char,short, unsigned,等等;

2.变量的本质是内存中的存储单元

2.c数据类型:(1)基本类型:数值类型,字符类型

(2)构造类型:数组,结构体,共用体,枚举类型

(3)指针类型

(4)空类型void

3.sizeof和strlen

sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。

该类型保证能容纳实现所建立的最大对象的字节大小。

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。

而sizeof()函数返回的是变量声明后所占的内存数。

sizeof是算符,strlen是函数。sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。

数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,

如:

fun(char [8])

fun(char [])

都等价于 fun(char *)

char str[20]="0123456789";

int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。

int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。

上面是对静态数组处理的结果,如果是对指针,结果就不一样了

char* ss = "0123456789";

sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是

长整型的,所以是4

sizeof(*ss) 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类

型的,占了 1 位

strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen

sizeof返回对象所占用的字节大小. //正确

strlen返回字符个数. //正确

在使用sizeof时,有一个很特别的情况,就是数组名到指针蜕变,

char Array[3] = {'0'};

sizeof(Array) == 3;

char *p = Array;

strlen(p) == 1;//sizeof(p)结果为4

在传递一个数组名到一个函数中时,它会完全退化为一个指针

----------------------------------------------------------

看完以上你是否很清楚sizeof和strlen的区别了呢?还不明白的话,我们看下面几个例子:

第一个例子

char* ss = "0123456789";

sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针

sizeof(*ss) 结果 1 ===》*ss是第一个字符

大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度

这就是sizeof(x)可以用来定义数组维数的原因

char str[20]="0123456789";

int a=strlen(str); //a=10;

int b=sizeof(str); //而b=20;

大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度

这就是sizeof(x)可以用来定义数组维数的原因

char str[20]="0123456789";

int a=strlen(str); //a=10;

int b=sizeof(str); //而b=20;

char ss[] = "0123456789";

sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1

sizeof(*ss) 结果 1 ===》*ss是第一个字符

char ss[100] = "0123456789";

sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1

strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前

int ss[100] = "0123456789";

sizeof(ss) 结果 400 ===》ss表示在内存中的大小 100×4

strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以'\0'结尾的

char q[]="abc";

char p[]="a\n";

sizeof(q),sizeof(p),strlen(q),strlen(p);

结果是 4 3 3 2

4.面试题:

(1)

//void Test1()

//{

// char* arr = "hello world!";

// int len1 = sizeof(arr); //4,地址的大小均为4字节

// int len2 = strlen(arr); //12,找到‘\0’,共12字节

// printf("sizeof:%d\n", len1);

// printf("strlen:%d\n", len2);

//}

//void Test2()

//{

// char arr[20] = "hello world!";

// int len1 = sizeof(arr); //-->20只看类型大小

// int len2 = strlen(arr); //12,找到‘\0’,没有'\0'长度

// printf("sizeof:%d\n", len1);

// printf("strlen:%d\n", len2);

//}

//void Test3()

//{

// char arr[] = "hello world!";

// int len1 = sizeof(arr); //13,有‘\0’长度

// int len2 = strlen(arr); //12,找到'\0',无‘\0’长度

// printf("sizeof:%d

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c语言笔记第二天:枚举和数组 下一篇c语言笔记第三天函数定义,c/c+..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目