0: 字符串,羊肉串
1:字符串字面量,字符串字面量是指使用双引号扩起来的字符序列,例如:“hello world”
在c语言中,把字符串当作字符数组来处理,当遇到长度为n的字符串时候,程序分配长度为n+1的数组来保存,最后一个字符表示字符串的结束‘\0’
根据我们知道的数组和指针的关系,可以使用字符指针来保存字符串常量,例如char *c;c=“hello world”;可以使用字符指针来保存字符串常量,可以使用字符指针来保存字符串常量
可以使用字符指针来保存字符串常量,可以使用字符指针来保存字符串常量
注意区分字符敞亮和字符串常量,例如:‘a’和”A”,第一个是字符常量,而第二个是字符串常量,这个羊肉串只有一个羊肉而已
2: 首先测试一下*取地址,是否可以取*&i这个
c语言里面使用一维数组来保存字符串,字符串的最后一个字符是空字符‘\0’,加入我们要保存10个字符,需要定义个一个长度为11的字符数组来保存字符串
初始化字符串
char name[10] =“tom”; 在数组里面保存是这样的
char name[10]={’t’,’o’,’m’,’\0’}
3: 字符数组和字符指针:(一句话,一旦要修改就用数组)
看下面两个申明:
char *str =“Hello World”;
char str1[] =“Hello World”;
字符数组和字符指针的区别:
1,字符数组和任何其他的数组一样,数组元素可以被修改,而字符指针保存的是字符串字面量,是一个常量,不能够被修改
2,申明为字符数组时,str1位数组名,而神明为字符指针时str位指针变量,可以被修改重新赋予值
3,如果需要可以修改变量的字符串,必须申明为字符数组,字符指针是不行的
// // main.c // TestArrayPoint // // Created by 千 on 16/7/18. // Copyright © 2016年 kodulf. All rights reserved. // #include <stdio.h> int main(int argc, const char * argv[]) { // insert code here... printf("Hello, World!\n"); int array[] = {1,2,3,4,5}; //测试指针是否可以修改该数组上面的值,是可以的 int *point = array; *point = 6; printf("*point=%d\n",*point); printf("array[0]=%d\n",array[0]); //测试指针是否可以修改字符数组上面的值,是可以的 char charArray[]="hello"; printf("charArray[0]=%c\n",charArray[0]); char *pointchar = charArray; printf("*point=%c\n",*pointchar); *pointchar = 'w';//注意了这里是*,不能少了,而且后面的w是字符而不是字符串 //charArray[0]='w'; printf("*point=%c\n",*pointchar); printf("*charArray=%s\n",charArray); //指针数组可以访问每一个元素,但是不可以修改,所以说如果要修改就使用字符数组 char *pointArray = "hello";//指针数组,可以访问里面的每个元素的,但是不可以修改的 printf("*charArray=%s\n",pointArray); pointArray++; //*pointArray='c';//是不可以修改的如果修改,会报错,Thread 1:EXC_BAD_ACCESS(code=2,address=0x1000000...) printf("%c\n",*pointArray); printf("*charArray=%s\n",pointArray); return 0; }
4: 字符串的读写:
可以使用printf和puts来输出一个字符串,printf提供了格式化输出,可以使用%s来输出一个字符串,还可以使用%.ps来输出字符串的一部分,p表示字符串的个数,puts值提供一个字符串参数,可以自动换行
字符串库函数string.h
输入输出的格式控制,比如%d表示后面的输出类型为有符号的10进制整形,%u表示无符号10进制整型,%lu表示输出无符号长整型整数
//
// main.c
// StringDemo
//
// Created by 千 on 16/7/17.
// Copyright © 2016年 kodulf. All rights reserved.
//
#include <stdio.h>
#include <string.h>
#define SIZE 5
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
int c = 100;
int *p =&c;
printf("地址p=%p\n",p);
printf("c的值=%d\n",c);//注意了%d的%符号一定不能是
//*表示取地址上面的值
printf("c的值=%d\n",*&c);
char string[5] ="12345";
printf("c size is %d\n",sizeof(string));
for (int i=0;i<sizeof(string); i++) {
printf("%c00000\n",string[i]);
}
//字符串常量
char *name = "tom";//字符串数组来保存{‘t’,‘o’,‘m’,‘/0’} 空字符结尾
char test[100]="tom";//
char email[]="tom@gmail.com";
char charArray[SIZE+1]="tom12";//它的长度实际是6个
//字符串变量
char test2[5]="hello";//初始化
//test="Hello World";//初始化可以,但是不可以赋予值
//字符指针和字符数组
char array[] = "Hello World";
char *testArray = "Hello World";
printf("%s\n",array);
printf("%s\n",testArray);
//4 字符串的输出
char *strOutput = "hELLO WORLD";
printf("str=%s\n",strOutput);
printf("str=%.5s\n",strOutput);
//5 字符串的输入
char testInput[10];
printf("Please intput a String:\n");
//scanf("%s",testInput);//但是如果遇到hello world 这样的中间有空格的就有问题了
//printf("%s\n",testInput);
gets(testInput);//使用gets就不会有上面的问题了
printf("%s\n",testInput);
//字符串的库函数:
//字符串的长度
//size_t strlen(const char *s);
//该函数返回第一个空字符\0 前面的字符个数
//char *testStrLen="123456";
char testStrLen[20]="123456";//当神明的时候的长度比初始化时候的长,返回第一个空字符\0 前面的字符个数
size_t size = strlen(testStrLen);
printf("testStrLen is %lu\n",size);
//字符串的拷贝
//char *str = "Hello";str = “hello world”;这个事不行的
return 0;
}