指针的初始化和赋值,指针的初始化 指针的赋值 有什么区别二者的联系是什么使用上有

1 , 指针的初始化 指针的赋值 有什么区别二者的联系是什么使用上有初始化是指第一次定义指针的时候就给它赋个值 。赋值不一定是第一次 。指针最好要初始化 , 否则会成为野指针 , 野指针很危险 , 因为它会指向一个不明确的内存,对这个指针的操作可能会导致系统故障 。
2,指针变量怎么初始化可以指向空,也可以指向某个变量地址啊定义时 int *p=NULL;或者int *p=&a;直接写 int *p = &a; 就行了你可以考虑的简单一点,如果类里只是一个普通成员变量,你是怎么初始化呢.你应该不会考虑去分配内存了吧.直接使用第二种赋值就可以了.还有你可以这么想,你通过参数传进来的是一个指针变量,如果你再对这个变量用new分配内存,那么你传进来的指针变量就显得多余了,为什么不对成员变量分配内存,而要通过一个变量分配内存后在赋值呢,这种操作岂不是多此一举了.类的成员变量的初始化有两种方式,一种是a:a(char *str):a(str)这种形式的,这是在类的初始化列表中初始化的,如果你类中的成员变量是const类型的话,你可以通过这种方法初始化;第二种是在构造函数的函数体内进行初始化,也就是普通的赋值了,但不能对const类型初始化.类的初始化我觉着就这方面要注意了,希望对你有所帮助.
3,关于指针变量的初始化的问题因为前面有个int定义这里是申请一个指针如果是 int p=&i你觉得可能吗?所以啊 , *p是表示是个指针,接着初始化所以指针有两种方式初始化一个是int *p=&a一个是int *p;p=&a;这是正确的 char 指针的初始化也可以写成 char *p = "string";这是把存储 "string" 的首地址赋值给 pint p; p是整形变量int*p; p是整形指针,也是一个变量 。需要解引用,它直接存的是址址 。所以给p赋值应该是使用取地址符 &.你这个是定义的时候偶就初始化,按你的理解应该这样写:int *p;p=&i;即先定义再初始化这句语法实际上是缩写,你这样理解就可以了: int *p;p=&i;就是先定义p,后赋值.你说的没错 , p是存放地址的 。但这种情况只有在定义指针变量时才可以用!这是定义指针变量并初始化!如果不是定义的时候就要像你说的那样写 。【指针的初始化和赋值,指针的初始化 指针的赋值 有什么区别二者的联系是什么使用上有】
4,二维数组和数组指针的初始化char m[3][4]; m[3][4]={"asd","fgh","jkl"};当然不行,不管从初始化器,还是从原理上来讲都不正确,首先a[3][4]表示的是数组中第4行第5个元素 , 请问 , 可以对数组中具体的一个元素赋这么长一串值吗?所以不能这样赋值 。第一种写法是属于初始化,初始化会自动为数组中的每一个元素赋正确的值 。数组指针初始化方法:int (*p)[4];char a[3][4];p=a;p=&a[0];p=a+1;p=&a[1]; //都正确p=a[0]; //错误p=a[1]; //错误 。首先,指针p表示的是,指向一个含有4个元素的一维数组的指针,因此,必须把一个含有4个元数的数组的地址赋给指针p才会正确 。因为二维数组名a , 其实就是&a[0],表示二维数组第一行的行指针,这一行包含有4个元素 , 因此他就是一个含有4个元素的一维数组的指针,是正确的赋值 。同理a+1是与&a[1]等价的,也就是表示的是二维数组第行的的行指针 , 同理a[0]是错误的,因为a[0]是指的第一行第一个元素的地址,也就是&a[0][0],他只含有一个元素,不是一个数组的地址,所以错误具体的情况可以去本人的文库下载关于指针的文章,里面有关于二维数组和指针的详细计算过程 。

    推荐阅读