字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)

#define  _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

//一级指针的典型用法
//数组 int a[10]
//字符串
//1 C语言的字符串 以零结尾的字符串
//2 在C语言中没有字符串类型  通过字符数组 来模拟字符串
//3 字符串的内存分配  堆上 栈上 全局区 (很重要)

//字符数组 初始化
void main51()
{

	//1 指定长度
	char buf2[100] = {‘a‘, ‘b‘, ‘c‘, ‘d‘};
	//1-1char buf3[2] = {‘a‘, ‘b‘, ‘c‘, ‘d‘}; //如果初始化的个数大于内存的个数 编译错误
	//1-22//后面的buf2[4]-buf2[99] 0

	//2 不指定长度  C编译器会自动帮程序员 求元素的个数
	char buf1[] = {‘a‘, ‘b‘, ‘c‘, ‘d‘};  //buf1是一个数组 不是一个以0结尾的字符串

	printf("buf2: %s \n", buf2);

	printf("buf2[88]:%d \n", buf2[88]);

	printf("hello....\n");
	system("pause");

	return ;
}

//用字符串 来 初始化字符数组
//strlen() 长度 不包括0
//sizeof() 内存块的大小
void main52()
{
	int size = 0;
	char buf3[] = "abcd"; // buf3 作为字符数组 应该是5个字节 //作为字符串 应该4个字节
	//以上也会把/0拷贝给数组。所以buf3作为字符数组 5 个字节  ,

	int len = strlen(buf3);
	printf("buf3字符的长度:%d \n", len); //4

	//buf3 作为数组 数组是一种数据类型 本质(固定小大内存块的别名)
	size = sizeof(buf3); //
	printf("buf3数组所占内存空间大小:%d \n", size); //5

	printf("hello....\n");

	{
		char buf4[128] = "abcd"; // buf
		printf("buf4[100]:%d \n", buf4[100])// 结果为0;
	}
	system("pause");
	return ;
}

//通过数组下标 和 指针
void main58()
{
	int		i = 0;
	char	*p = NULL;
	char buf5[128] = "abcdefg"; // buf

	for (i=0; i<strlen(buf5); i++)
	{
		printf("%c ", buf5[i]);
	}

	p = buf5; //buf 代表数组首元素的地址

	for (i=0; i<strlen(buf5); i++)
	{
		p = p +i;
		printf("%c ", *p ) ;
	}

	//buf
	for (i=0; i<strlen(buf5); i++)
	{
		printf("%c ", *(buf5+i) ) ;
	}

	//[] *的推导过程
	// buf5[i] ===> buf5[0+i]; ==> *(buf5+i);

	{
		//buf5 = buf5 + 1;   这种不可以
		//buf5 = 0x11;  这种不可以
	}
	printf("hello....\n");
	system("pause");
}

// []的本质 :和*p 是一样 ,只不过是符合程序员的阅读习惯
// buf5 是一个指针,  只读的常量  buf5是一个常量指针  析构内存的时候,保证buf所指向的内存空间安全释放
//为什么这么做?如果,轻易改变 buf的内存空间总变 ,这是不可以的

//p普通指针和内存首地址区别

  

时间: 2024-10-09 20:28:57

字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)的相关文章

30 字符串的基本操作 格式化字符串(%,Template类,format方法*****)

Python视频课程(5)-Python字符串 第一课 字符串的基本操作 # 字符串:基本操作 字符串取单个字母 s1 = "I love python." print(s1[7]) # p print(s1[11]) # o # print(s1[15]) # 超过字符串长度 会报错 # 利用分片截取字符串的子字符串 取一段区间的字符串 print(s1[7:13]) # python print(s1[7:]) # python. print(s1[::2]) # Ilv yhn

Delphi字符串的基本操作--转

转载:http://www.cnblogs.com/pchmonster/archive/2011/12/16/2290034.html 结合这个博客一起学习:http://www.cnblogs.com/xumenger/p/4427957.html 在实际编程中,这些操作会经常用到的.开始你不用着急全部记住它们,只要知道有这些功能就行,需要用到的时候能查到即可. 1.用 + 操作符实现字符串的连接 1 2 3 4 5 6 7 8 9 10 11 12 var   X: Integer;   

基本数据类型扩展,及字符串的操做(切片,记忆希望字符串的基本操作)

?.python基本数据类型 1. int ==> 整数. 主要?来进?数学运算 2. str ==> 字符串, 可以保存少量数据并进?相应的操作 3. bool==>判断真假, True, False 4. list==> 存储?量数据.?[ ]表? 5. tuple=> 元组, 不可以发?改变 ?( )表? 6. dict==> 字典, 保存键值对, ?样可以保存?量数据 7. set==> 集合, 保存?量数据. 不可以重复. 其实就是不保存value的di

对字符串的基本操作(查看,转成编码,截取,拼接)

定义字符串有两种方法: 1.构造函数的方法 var str = new String("hello") console.log(str) //hello (是以对象的形式存放,构造函数方法定义的字符串是引用类型(object)) 2.字面量的方法 var str = "hello" console.log(str) //hello (是以对象的形式存放,字面量方法定义的字符串是基本类型(string)) 下面我用字面量的方法书写 charAt() 返回字符串中的某个

PHP变量引用赋值与变量赋值变量的区别

变量默认总是传值赋值.那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量.这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量.有关这种类型的赋值操作,请参阅表达式一章. <?php $foo='abc'; $b=$foo; $b="my name is $b"; echo "$b"; //my name is abc echo "$foo"; // abc PHP

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

final,static静态和非静态,初始化和代码块的区别、父类和子类中都有static变量时的初始化顺序、重写equals()、 instanceof强制转换

final:类不能被继承,方法不能被重写,属性值不能被修改(常量): 可以调用: static静态常量----- 不需要创建对象,可以直接调用类里面的属性,方法: 示例如下: 加了static说明它是属于整个类的,每个对象值都一样,如下图所示:size是静态的,所以当在下面t1对象中改变size的值时,整个类中的size值都变了:然后作为普通属性的length,当在t1对象中改变其值,并不会改变原始值: 静态方法不能调用非静态的方法和非静态的属性,也不能打印非静态的方法和非静态的属性:可以在静态

Java中String的两种赋值方式的区别

本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过"字面量"赋值,如:String str="hello",第二种是通过new关键字创建新对象,如:String str=new String("hello").那么这两种赋值的方式到底有什么区别呢,下面给出具体分析. 1.首先回顾Java虚拟机的结构图. 在上面的

c语言常量指针赋值给变量指针导致警告

常量指针定义:常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针.指针指向的对象是常量,那么这个对象不能被更改.常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值. 在C/C++中,常量指针是这样声明的: 1)const int *p; 2)int const *p; 例子: int