深度理解C指针---读书笔记

今天没带记笔记的本子,今天课比较多,所以就没带。

不多说了,进入正题:

-------------------------------------------------------------------------华丽风格线-------------------------------------------------------------------------------------------------

                                                                        

                                                                       第5章指针和字符串

                                                 

-------------------------------------------------------------------------华丽风格线-------------------------------------------------------------------------------------------------

(1)字符串通常是以字符指针的形式传给函数和从函数返回。这样我们就可以对字符串操作了,,还有一种方式传递字符串,就是我们可以用字符串常量的指针传递字符串,

它的好处是不能修改其内容。

(2)字符串是以ASCII 字符NUL结尾的字符序列。ASCII字符NUL表示为\0.

NULL和NUL是不同的:

NULL用来表示特殊的指针,通常定义为((void *)0)

NUL是个char,定义为\0.

字符串字面量是用双引号引起来的字符序列。位于字符串字面量池中。其内存在程序栈外,分配在只读内存中,是不可变的。它的定义可以在内存任何地方没有作用域,static,局部和全局变量都无所谓。(GCC中可以修改其内容,但是C标准是禁止修改的)

字符常量是用单引号引起来的字符序列。

(3)字符串初始化

初始化数组:

1,char p[]="sssssssssssss";或者是

2,char h[20]; strcpy(h,"sssssssssssssssssss");

还有个是做个for一个一个的录入;

初始化指针:

首先malloc一块内存空间字符串长度+1的长度;

char *p=(char *)malloc(strlen("ssssss")+1);

strcpy(h,"ssssss");

不要用sizeof操作符它会返回数组和指针的长度,而不是字符串的长度



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

#include<stdio.h>
#include<stdlib.h>
void main()
{
    char p[10];
	int a;
	a=strlen(p);
   	printf("%d",sizeof(p));
	printf("%d",a);//error
	printf("%d",sizeof("aassss"));
}

.C文件中

在C中sizeof('A')的大小为4

字符常量在C中的类型是int类型的

.cpp中为1;

char *p=‘sss’;

试图用字符字量面来初始化化char指针是不行的,因为它是int类型的不能转向char;









      

发布了61 篇原创文章 · 获赞 43 · 访问量 12万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章