首页 > 代码库 > 黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址
格式:  int  *p;  这个p为指针变量;指针变量占8个字节
类型是用来说明这个指针指向的类型; 比如上边的int代表这个指针变量会指向int类型的存储空间;
int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针;
*p = &a;//这样写就错了;此时*p表示取p指向的空间的值;
 
指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比如int取4个字节,char只取一个字节;
 
指针和数组的关系
把一个数组名当做参数传递的时候,c编译器会把它变成一个指针;对一个指针加1,并不是加1,要看指针的指向的类型,如果是int那么指针就+4个字节
如果是char类型,那么指针地址就+1个字节;
 
指针和字符串的关系
创建字符串的两种方式:
第一种:char数组创建字符串:
1—>  char name[] = “itcast”;
是一个字符串变量,可以通过  name[i] = ‘ ..’;来修改其中某个字符的值,
这种相当于一个字符串变量,一般存放在栈中,且经常修改值得情况;
第二种:指针创建字符串:
2—> char *name2 = “itcast”; //name2指向了字符串的第一个字符,即 i ;
相当于一个字符串常量,内容不可改变的; 放在常量区中;
当然一般我们不需要对字符串进行修改,且经常使用的字符串,就用指针来创建字符串;
%s这个占位符是用来输出字符串的,当用指针输出时,直接写上指针的名字即可;因为这个%s会自动从第一个地址往后找,知道\0;
 
创建字符串数组的两种方式
第一种:二维字符数组:
char name[2][10] = {“jack” , “rose”};
 
第二种:指针数组:
char *name[5] = {“java” , “rose”};