一个C语言中指针型字符数组的问题
char *p=“AAA”; //初始化一个指向字符串的指针(指向字符串其实是指向字符串的第一个字符)注意,上面说的是指向字符串常量!p[0]=B; //不允许 这会导致内存访问错误。
数组指针定义int(*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。
char* names[]这条语句中定义了一个存放字符型数据的地址的指针数组,也就是说names[]中的元素都是地址,这些地址指向的是存放在其他地方的字符数据。
好了,char *name[] 这里既有*又有[],就是说定义的是指针,但是是指针数组,也就是很多个指针,而这其中的每一个指针都指向一个字符串的首个位置,也就是字符串数组,字符串数组也就是字符的二位数组。。
C语言中指针变量的初始化有几种?请分别举例并说明。
1、对于指针来说,在C语言中,就是一个地址。区分初始化情况,有四种表象:1 初始化为空。
2、a是一个变量,是存放地址的变量,所以int *a=12是错误的初始化a语句,可以写成以下形式:int b=12,*a=这样,12存放在变量b中,而a中存放的是b的地址。
3、按作用域,C语言一般分为全局变量和局部变量。
4、指针摘自谭浩强C语言程序设计指针是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。
在c语言中在定义一个指针变量时不能对其进行初始化
1、使用指针前必须声明,但没有说必须定义;既然不是定义,就不一定要初始化。只是没有初始化的指针不能做右值使用而已。此题中的第一选项是错误的,因为指针p是野指针(即指针没有指向),却要给它的指向*p赋值x。
2、C语言规范没有要求,有的编译器实现会给个警告,有的直接编译过。定义指针后可以不初始化,但实际上这个指针变量中已经有一个值了(就是分给这个指针变量的地方内存中原来的值,假设是0x1234)。
3、所以指针使用前一定要记得先初始化。如果想要靠输入给指针初始化,那对应语句应该是scanf(%d, &ps);不过这样做实际没啥意义,这样做也挺危险。如果后面用这个指针往里面写内容可能会程序崩溃,甚至你的系统会崩溃。
4、a是一个变量,是存放地址的变量,所以int *a=12是错误的初始化a语句,可以写成以下形式:int b=12,*a=这样,12存放在变量b中,而a中存放的是b的地址。
5、相反,在C语言中,没有为指针变量分配实际存储器,这样若你直接要求向指针变量传输数据时,编译软件就无法知道该传到什么位置,这就出现一个语法错误。