指针有了一点心得,定义跟使用是有区别的,其实指针就是一个地址变量,定义指针的时候会加一个“ * ”,使用的时候,*p是指指针p指向的那个值,p就为地址。当然可以定义多重指针,原理都是一样。指针从根本上来说就是一种索引的概念,从这个意义上说,将数组理解成一个指针就好理解了,a[i]中i表示索引,a[i]表示指向的那个值,a在内存中作为一个地址标识,是这个数组的首地址,a+i就表示第(i-1)个元素的地址。另外,数组是同一类型数据的集合,通过数组这种数据结构方便数据的读取和使用,各个元素存取在内存中连续区域,不能设置成register类型。不同类型数据的聚集则采用结构体的形式。
读入文件中数据,数据文件可定义为.dat,.txt。通过定义的指针的移动来逐个读取数据,从左到右,由上到下,读取完一个数据之后指针自动移动到下一个数据的位置,fopen函数用来打开一个文件,其调用的一般形式为:
文件指针名=fopen(文件名,使用文件方式);其中, “文件指针名”必须是被说明为FILE 类型的指针变量;“文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
例如: FILE *fp; fp=fopen("file a","r"); 其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。处理device中对host函数调用问题,global函数可以与host,device交互;device函数只能在gpu上运行,作用范围也只是在gpu中,其中定义的变量为device中的变量,如果此函数需要调用其他函数,则被调用的函数必须同为device类型。若被调用函数为host函数,则一种办法可以将其定义为__device__类型,如果需要一个返回值的话另一种办法通过__global__函数,动态分配一块空间,将返回值传输到device中。不搞清楚各个变量和函数的作用范围,编译器会找不到某个变量或不允许对不合法的函数进行调用。
函数的调用,普通变量(值传递)与指针变量(地址传递)的区别,在普通变量中交换形参不会改变实参的值,而使用指针变量则可以达到交换实参的作用,c语言教材有具体的示例对比。
随机数的读取,种子seed不改变,随机数的值不会改变。srand(time(0)),是跟时间相关的随机数,但需要#include time.h,若要产生某个范围的随机数,使用“/”与“%”的搭配。