初学C语言,指针的确是一个坎,但这又是基础,不得不学。真的学了好久,总是一知半解,也不怎么会做题,写下这篇博客,希望能帮助刚出门的小白,后续还有C语言指针例题以及详解。
不怎么会C语言数组与指针的可以先看下这个,绝对良心拒绝入坑。
C语言数组与指针,拒绝入坑https://blog.csdn.net/weixin_45755332/article/details/106851798
这里是有关指针的练习题,来自被谭浩强折磨的大学生
char arr[n];
char arr[5]={'a','b','c','d','e'};//注意,字符串类型的必须要加引号 ' '
也可以用ascll码来定义
char arr[5]={65,66,'c','d','e'};
printf("%c",arr[1]); // B
char arr[5]={65,66,'c','d','e'};
for (int i =0;i<5;i++){
printf("%c ",arr[i]);//A B c d e
}
可以看出一般语法字符数组和其他类型的数组是一样的
下 面 来 看 看 不 同 的 地 方 {\color{Red}下面来看看不同的地方} 下面来看看不同的地方
字符数组最后加了一个’\0’表示字符串的结束
字符串:就是一串字符,之前的数组是一个一个的组起来的。
输出时字符串可以一起输出,数组只能单个输出
注意这里是 %s
char arr[ ]={'a','b','c','d','\0'};
printf("%s",arr); //abcd
当然还有更简单的,直接不用加\0,他自己给你加,(当然加也可以,他不会输出的)
char arr1[]="abcd";
printf("%s",arr1); //abcd
意:如果你写的是arr[5],那么他之能保存四个字符因为最后一个 \0 他是存在的(没显示而已),也占一个字符位置。
上面两种类型的区别:他们开辟的内存空间是不一样的,
第一种是在数组中开辟了五个空间,分别存放五个字符,内存空间如左图。
第二种是将abcd放到一个只读区域,arr1开始并没有这些字符,arr1[]=“abcd”;是把abcd拷贝了一份给了arr1[ ]。
当然也可以用for循环输出
char arr1[]="abcdefg";
for (int i =0;i<7;i++){
printf("%c ",arr1[i]); //a b c d e f g
}
想要对已定义的字符串进行更改,是不能直接改的,如下是错误的。当然如果不嫌麻烦可以一个一个的改,就是arr[0]="a“,arr[1]="b"这样。
char arr[10]="ewrgga";
arr[ ]="laoli";
为了更改方便我们引入一下函数库string.h
调用**strcpy()**函数。
注意不要越界也就是arr[10]之能copy9个字符
#include
#include
int main(){
char arr[10]="ewrgga";
strcpy(arr,"abcdefg");
printf("%s ",arr); //abcdefg
}
如我们定义了一个字符串
char string[]="I love China!";
其内存如图所示。
注意与数组和指针是一样的,string是字符串名,又是字符串的首地址
char string[]="I love China!";
printf("%s ",string); //源字符串 I love China!
printf("%d ",&string); //字符串的首地址 6487568
printf("%c ",*string); //字符串首地址的内容 I
printf("%d ",string+7); //字符一个占一个字节,这里的string就代表首地址,加7就相当于往后移动了七个字节,到了C的地址的位置 6487575
printf("%c ",*(string+7)); // 打印下该地址的字符是啥 C
printf("%c ",string+7); // 从C开始往后打印 China!
#include
int main(){
char *str="I love China!";
printf("%s\n",str);
str+=7;
while(*str){
printf("%s\n",str[0]);
putchar(str[0]);
str++;
}
}
I love China!
China!
说明:
char *cp;与char str[10]
char str[20];
str= "I love China!";
********************************
str[0]='I';
str[1]= 'l';
...
...
********************************
char str[20] = "I love China!";
char *cp;
cp = "I love China!";
*****************************
char *cp = "I love China!";
char str[10];
scanf("%s",str);
**********************
char *cp;
scanf("%s",cp);
************************
char *cp,sre[10];
cp=str;
scanf("%s",cp);
当字符指针执行指向字符串时,除了可以被赋值之外,与包含字符串的字符数组没有什么区别。
与上面那个相似,只是这个先把字符串赋值给了pstr,然后再strcpy给str。这与上面那个strcpy的主要区别就是,这个先定义了str[3],原本只能放两个字符的,现在能放多个了,也就是不受中括号里面的限制了
#include
#include
int main(){
char str[3],*pstr;
pstr="12345";
strcpy(str,pstr);
pstr=str;
printf("%d",strlen(pstr)); //6
printf("%d",strlen(str)); //6
}