编程猫 加入收藏  -  设为首页
您的位置:编程猫 > 知识 > 正文

目录

1,C语言 指针变量的初始化问题

C语言 指针变量的初始化问题

变量的初始化就是在定义变量的时候,直接对变量进行赋值操作。初始化的方式一般有如下两种:1、直接对变量进行赋予常量数值进行初始化;2、通过同类型变量进行初始化。举例说明如下:// 以下属于第1种初始化方式int a1=5; // 整型变量的初始化int b1[]={1,2,3,4}; // 整型数组的初始化char str1[]="abcd"; // 字符数组的初始化// 以下属于第2种初始化方式int a2 = a1; // 整型变量的初始化int b2[4] = b1; // 整型数组的初始化char str2[4] = str1;// 字符数组的初始化char *p = str1; // 字符指针的初始化

2,C语言中的“char指针初始化”是什么意思?

char 指针,也就是char *类型。 其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值。
对于指针来说,在C语言中,就是一个地址。区分初始化情况,有四种表象:
1 初始化为空。即
char * str = NULL;
的形式,NULL在C语言中是特定的空指针,其值为0.在C语言中,以NULL作为指针的一个未生效状态,其本身是一个非法的地址值。

2 初始化为常量字符串地址。
char * str = "test";
常量字符串在运行时会被放在常量空间中,于是这样初始化后,地址是常量空间中的一个地址,对于该地址只能读取,不可写入。即str的值可以改,但是str指向的值是不可修改的。

3 初始化为变量地址。
这里的变量地址,包括全局变量,局部变量的地址,以及通过动态分配申请到的内存地址。
这种情况下,对指针指向的空间是可以修改的。

4 不做初始化。
这种情况在C语言中是允许的。如果为全局变量或静态局部变量,系统默认初始化为0值,即NULL。而对于局部变量,将是一个随机值。所以如果是局部变量不做初始化,在取其指向空间值前,必须为其指定一个合法的值,否则访问会出错。

3,char型指针的初始化问题

直接初始化就是在定义变量的同时给其赋值,你定义了一个指向char的指针型变量,后面只要给它赋上相对应类型的值就可以了。
区别在于你这里赋给str的是一个常量字符串,存储在静态全局区,因此str也成了一个指向常量的指针。
如果像如下定义:
char a[4]={a,b,c,d};
char*str = a;
也是一种初始化直接赋值,但是赋给str的是一个变量,所以str就是一个指向栈的指针了。
定义字符数组char str[]="abcd"只能有这么一种初始化方法,此时的abcd其实是存放在数组str中的,所以存储在栈中,与char* str="abcd"是不一样的。
*p++是先执行*p,再++

4,指针变量必须要初始化吗?

刚去看了你的程序externUSER*record;/*不是在这里定义了吗????*/请注意加了extern关键字就不是变量的定义了,而是变量的声明,声明了变量record已在其他文件中定义了,所以如果你其他文件里没有record的定义(不能带extern),此程序就找不到record的定义另外,定义指针的时候,有些编译器是不允许不初始化指针的,因为未初始化的指针有可能会指向程序的静态空间,这些空间是不允许写操作的,如果程序里对指针指向的位置执行写操作,会引发无法预计的后果,所以有些编译器要求定义指针的时候要初始化,建议用数组代替指针使用,可提高代码的安全性

5,指针的初始化,int*p=“abcd”和int*p=&a有什么不同?其中a也是整形变量

int *p 是 变量声明,声明 p 是指针,用于指向 整型量。
int *p=“abcd” ; 声明并初始化。用了错误的表达,因为 p 是整型 指针,初始化 要 赋给int 型 变量的地址,而不是双引号括起的 “字符串常量”。
int *p=&a; 声明并初始化。 初始化,让 p 指向 a 的地址。 a 应当是 已知的 int a.
&a 是 a 的地址。 是正确的 表达方式。

6,指针变量的如何初始化?

*p=ival 表示*p的内容是ival(可以是个值或是空间)定义的时候可以写成p=&ival,p的值是ival的地址值oxcdcdcdcd一类的东西;有时候在函数调用的时候,今后会用很多,会用到**p,作为指针的形参传递
指针容易出错是 如果p指向一块找不到的空间,取*p会出错的,或是p和*p用错地方了,很容易出错。只有自己多练,理解指针的原理才会发现其好用的地方。建议你练练单链表去掌握指针的基本使用。

7,java applet 小程序,为什么运行的时候提说未初始化小程序呢,还有提示空指针?求高手解答!抱歉没分了跪

你的程序作为Java应用程序运行没有问题,如果要作为Java小程序运行,需要改三处:
一、class ButtonControl extends Frame implements ActionListener需要改成public class ButtonControl extends Applet implements ActionListener并且加上import java.applet.Applet;
二、public ButtonControl() 需要改成public void init()
三、需要注释掉//super("按钮控件演示程序");
这样你的程序就可以作为Java小程序运行了。
完整的程序如下:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class ButtonControl extends Applet implements ActionListener
{

Button btnDisplay;

Label lblMsg;

public void init()

{

//super("按钮控件演示程序");

btnDisplay=new Button("显示消息");

lblMsg=new Label(" ");

add(btnDisplay,BorderLayout.NORTH);

add(lblMsg);

btnDisplay.addActionListener(this);

setSize(200,200);

setVisible(true);

}

public void actionPerformed(ActionEvent ae)

{

if(ae.getActionCommand().equals("显示消息"))

{

btnDisplay.setLabel("隐藏消息");

lblMsg.setText("");

}

else if(ae.getActionCommand().equals("隐藏消息"))

{

btnDisplay.setLabel("显示消息");

lblMsg.setText(" ");

}

}

public static void main(String args[])

{

ButtonControl btn = new ButtonControl();

}
}

8,java类的初始化顺序问题,求高手解答。

你好:
1、类只有在使用New调用创建的时候才会被JAVA类装载器装入
2、JAVA类首次装入时,会对静态成员变量或方法进行一次初始化
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法

所以这道题的运行结果是:
子类变量初始化
父类Test3构造
子类print变量:0
子类变量初始化
子类test4构造
父类print变量:25