C语言指针指定地址?

Python015

C语言指针指定地址?,第1张

首先,不能这样做,你c语言操作的地址并不是真实的地址,是操作系统从内存的某一段虚拟给你的地址,每次都不一样,每个程序所使用的内存互不干扰。

第二,而你的程序退出后,所拥有的空间就被系统全部回收了。也就不存在了。否则,你c语言乱改一通,要是改到系统正在用的内存,系统不就出现异常了吗。内存并不是由你管理的,而是操作系统管理的。

假设 a程序的 p指针,指向 0xaaa地址 ,你修改 b程序的 p指针,指向0xaaa,也是无法修改的,每个程序的内存都是系统虚拟的。保证程序可以安全稳定的执行。

据我所知,创建数组需要2个参数,1是地址,2是分配空间。空间分配是不能重复的,也就是说创建2个数组,这两个数组是不可能重合的,为了防止这种事情出现,所以不能指定地址。而是编译器自动分配,不能人为。

但是可以省去分配空间这个步骤,而是只创建地址,这就是指针的概念。比如int a[12],你若是想创建另一个代替a[12],可以int *p=a这样,p的值就是a数组的首地址了。int *p =(int*)0x80000意思就是p[0]的地址是0x80000,创建的时候要确定(int*)0x80000已经分配过了,可以使用了,不然就相当于野指针,容易出错。

//获取指定目录下的所有文件列表 author:wangchangshaui jlu

char** getFileNameArray(const char *path, int* fileCount)

{

int count = 0

char **fileNameList = NULL

struct dirent* ent = NULL

DIR *pDir

char dir[512]

struct stat statbuf

//打开目录

if ((pDir = opendir(path)) == NULL)

{

myLog("Cannot open directory:%s\n", path)

return NULL

}

//读取目录

while ((ent = readdir(pDir)) != NULL)

{ //统计当前文件夹下有多少文件(不包括文件夹)

//得到读取文件的绝对路径名

snprintf(dir, 512, "%s/%s", path, ent->d_name)

//得到文件信息

lstat(dir, &statbuf)

//判断是目录还是文件

if (!S_ISDIR(statbuf.st_mode))

{

count++

}

} //while

//关闭目录

closedir(pDir)

// myLog("共%d个文件\n", count)

//开辟字符指针数组,用于下一步的开辟容纳文件名字符串的空间

if ((fileNameList = (char**) myMalloc(sizeof(char*) * count)) == NULL)

{

myLog("Malloc heap failed!\n")

return NULL

}

//打开目录

if ((pDir = opendir(path)) == NULL)

{

myLog("Cannot open directory:%s\n", path)

return NULL

}

//读取目录

int i

for (i = 0(ent = readdir(pDir)) != NULL &&i <count)

{

if (strlen(ent->d_name) <= 0)

{

continue

}

//得到读取文件的绝对路径名

snprintf(dir, 512, "%s/%s", path, ent->d_name)

//得到文件信息

lstat(dir, &statbuf)

//判断是目录还是文件

if (!S_ISDIR(statbuf.st_mode))

{

if ((fileNameList[i] = (char*) myMalloc(strlen(ent->d_name) + 1))

== NULL)

{

myLog("Malloc heap failed!\n")

return NULL

}

memset(fileNameList[i], 0, strlen(ent->d_name) + 1)

strcpy(fileNameList[i], ent->d_name)

myLog("第%d个文件:%s\n", i, ent->d_name)

i++

}

} //for

//关闭目录

closedir(pDir)

*fileCount = count

return fileNameList

}