指针和数组是不相等的,把一个数组名作为一个参数传递给函数时数组名就是指向第一个元素的指针,
在大多数表达式中数组名的值是指向第一个元素的指针(有两个例外,一个是sizeof返回的是整个数组
的字节数,一个是&操作符返回的是一个指向数组的指针),但不代表两者等价。
int a[3];
int *b;
声明一个数组时,编译器会根据声明申请元素的个数保留内存空间,然后再创建数组名,a的值就是
一个常量,指向这段空间的起始位置。声明一个指针时,编译器只会为指针本身保留内存空间,不会
为任何整形值保留空间。
所以用*a是和法的,而*b是非法的。 a++是非法的,因为a是常量,b++合法。
字符指针与字符串和字符串的区别又是什么?
字符指针是一个指向字符的指针,字符数组是元素为字符的数组,字符串是一个以'\0'结尾的字符数组
char* a = "abcd";虽然你可以通过a访问字符串,但你对a进行字符串操作就会出错如strcpy(a,“bcd”)
因为编译器并没有为a预留字符串内存。(指针与数组的区别)
字符数组的大小是固定的
char a[] = {'a','b','c','\0','d'}; sizeof(a)为5不论有没有\0,
char b[] ="abcd", sizeof(b)为5,b = {'a','b','c','d','\0'}; 用字符数组存放字符串编译器会为字符串预留一个
位置存放'\0'表示字符串结尾,在32为平台下指针的大小总为4个字节。