c访问属性值
‘壹’ C语言中直接访问数据方式和间接访问数据方式区别
直接访问数据和间接访问数据 直接访问数据是指通过变量名直接使用变量数据,我们以前编写的程序,都是用这种方式访问数据。例如: int i; scanf("%d",&i); printf("%d",i); 间接访问数据是指通过指针变量去访问其他变量数据,这是C语言中大量使
‘贰’ 简述C语言中直接访问数据方式和间接访问数据方式的区别
C语言具有获取变量地址和操作地址的能力,而用来操作地址的这种特殊数据就需要使用指针。指针是C的核心思想,是否可以熟练运用指针是是否掌握C语言的标志。
指针概述
指针是一种数据类型,它的值表示内存地址,指针数据类型声明的变量是指针变量,使用指针变量可以对内存空间进行操作。在C中,对内存空间的访问有两种访问方式,直接访问和间接访问。
1.直接访问
按照C的方式,如果定义一个变量,系统会给这个变量分配一块内存,变量有两个属性,变量值和变量地址。变量地址指示了该变量在内存中的存储位置,变量值是这块内存中的内容。要访问这块内存空间上的内容,可以直接使用变量名。
2.间接访问
间接访问的含义是先从其它内存空间获得要访问的内存地址,根据得到的地址访问目的地址。
‘叁’ java 通过jni 向 c 传递一个 java 对象, c 如何取得这个对象的属性值
对于java传递进来的java对象模型,c要加载java类的原型,根据创建相应的c对象,获取java对象的方法的id,然后调用java对象的方法。比如有个java类customer对象作为jni参数传递到c程序,customer有方法String getName()。
JNIEXPORT jobject JNICALL Java_com_oracle_estt_sc_db_impl_SCQueryODBC__1getCustomer
(JNIEnv *env, jobject, jobject customer){
jmethodID methodId;
//获得customer对象的句柄
jclass cls_objClass=env->GetObjectClass(customer);
//获得customer对象中特定方法getName的id
methodId=env->GetMethodID(cls_objClass,"getName","()Ljava/lang/String;");
//调用customer对象的特定方法getName
jstring js_name=(jstring)env->CallObjectMethod(customer,methodId,NULL);
...
}
然后C向java传递对象方法如下:
JNIEXPORT jobject JNICALL Java_perfecter_jni_LoadJni_getJavaObj(JNIEnv* env,
jobject obj){
jclass clazz=env->FindClass("perfecter/jni/MyObj");
if(clazz==0)
return 0;
jobject jobj=env->AllocObject(clazz);
jfieldID fieldId=env->GetFieldID(clazz,"name","Ljava/lang/String;");
env->SetObjectField(jobj,fieldId,env->NewStringUTF("wahaha"));
return jobj;
}
java对应的native方法申明public static native MyObj getJavaObj();
‘肆’ c ++私有成员访问性
你这个问题有2方面的问题:
一:类和对象的概念你没搞清楚,类是对象的高度抽象,对象是类的实体化,在内存中来说,类就是一种数据类型跟int等式一样的,单说类是没有意义的,它并不占用内存,所以你这个类a的私有成员被类a对象访问本来就没任何意义。
二:类的私有成员是类的内部属性,就相当于一个人的心脏的跳动频率会让别人访问修改么一个道理,private的意思是在被继承或者类的外部无法访问这个成员,类在实体化后也就是建立对象后,具体对象的函数可以调用自己内部的private对象或者是友员函数也可以,private成员在不同的对象之间也是不能够相互访问的。
打字累死了,求给分。