一、字符串变量与常量
例:char a[]="abcdefg";
这一段语句中,既有字符串变量,也有字符串常量。
变量是数组a,常量是代码中的字面量字符串(abcdefg)。
此时,可以访问或修改a中任意一个元素;
但是,常量字符串只能访问,不能修改。(这句留着下面有用)
二、字符指针与字符串常量
例:char *p="abcdefg";
这个语句中,出现字符串常量,与一个指针变量。
注意,此时虽可以p【i】的方式访问字符,但却与上例有本质不同
此时,字符串作为常量存在于程序的静态存储区中,只能访问,不能修改
而p作为变量,位于程序的数据栈中,可以访问和修改。
但是!!!p此时指向的位置是静态存储区中的常量,因此不能使用p【i】='a'的方式改变字符串的值
三、字符指针与字符串变量
例:char a[MAX]; char*p=a;
这个就比较容易理解了字符指针指向一个字符数组,数组中存放的是变量。
因此可以访问和修改
四、字符指针和字符常量
这个其实没什么好说的,但是很好玩
p指针的赋值,一般都是p=&ch;
但是如果写出这样的代码p='a';
一般编译器是不会报错的,虽然会有一个警告。
这是因为C语言是一种很没有节操的而且会自动转换类型的语言。
当执行代码p='a'时,其实是将一个地址(0x61)赋值给了p,编译是能通过,但是赋值后如果再去访问p,很可能会出现越界错误。
例:char a[]="abcdefg";
这一段语句中,既有字符串变量,也有字符串常量。
变量是数组a,常量是代码中的字面量字符串(abcdefg)。
此时,可以访问或修改a中任意一个元素;
但是,常量字符串只能访问,不能修改。(这句留着下面有用)
二、字符指针与字符串常量
例:char *p="abcdefg";
这个语句中,出现字符串常量,与一个指针变量。
注意,此时虽可以p【i】的方式访问字符,但却与上例有本质不同
此时,字符串作为常量存在于程序的静态存储区中,只能访问,不能修改
而p作为变量,位于程序的数据栈中,可以访问和修改。
但是!!!p此时指向的位置是静态存储区中的常量,因此不能使用p【i】='a'的方式改变字符串的值
三、字符指针与字符串变量
例:char a[MAX]; char*p=a;
这个就比较容易理解了字符指针指向一个字符数组,数组中存放的是变量。
因此可以访问和修改
四、字符指针和字符常量
这个其实没什么好说的,但是很好玩
p指针的赋值,一般都是p=&ch;
但是如果写出这样的代码p='a';
一般编译器是不会报错的,虽然会有一个警告。
这是因为C语言是一种很没有节操的而且会自动转换类型的语言。
当执行代码p='a'时,其实是将一个地址(0x61)赋值给了p,编译是能通过,但是赋值后如果再去访问p,很可能会出现越界错误。