下面代码中的注释中陈述的整个数组的大小和语句是否正确?
//gArray uses sizeof(char)*100 = 1*100 = 100 bytes.
char gArray[100];
//gArray uses sizeof(char)*100*50 = 1*100*50 = 5000 bytes.
char gArray[100][50];
//gArray is a 2D array, each element is a pointer to a char (although
//char data type is irrelevant).
//gArray uses sizeof(void*)*100*50 = (4 or 8) * 100 * 50 = 20000 or 40000 bytes.
char* gArray[100][50];
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有一个C++算法,我需要在Java中实现类似的东西.我在内存分配方面遇到了麻烦.如何将以下代码段从C++迁移到Java?
size_x = 3; size_y = 6;
double **Data, *pDataData;
Data = (double **)malloc(size_x*sizeof(double *)+size_x*size_y*sizeof(double));
for (i = 0, pDataData = (double *)(Data+size_x); i < size_x; i++, pDataData += size_y)
Data[i]=pDataData;
Run Code Online (Sandbox Code Playgroud)
我知道对于一个简单的malloc,如:char*x =(char*)malloc(256); 在Java中,我会说:ByteBuffer x = ByteBuffer.allocate(250);
对于任何更复杂的事情,我感到困惑.
先感谢您
在分配然后尝试访问指针指针数组时:
void tester(char ***p)
{
int i;
char **pp;
pp = *p;
pp = calloc(10, sizeof(*pp));
for (i = 0; i < 10; i++)
printf("%d = %p\n", i, pp[i]);
*p = pp;
}
void tester_broken(char ***p)
{
int i;
*p = calloc(10, sizeof(**p));
for (i = 0; i < 10; i++)
printf("%d = %p\n", i, *p[i]);
}
int main(void)
{
char **a;
tester(&a);
tester_broken(&a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么其中一个工作和其他seg故障?
动机:将结构传递给函数,例如我们可以在任何函数中更改它并检索任何函数中的任何值.
我从以下网站获取了这些代码:http://cboard.cprogramming.com/c-programming/126381-passing-structure-reference-through-4-functions.html#post942397
我调整了一点,这里是:
struct_passing.h
typedef struct thing {
char *x;
}thing_t;
struct_passing.c
#include <stdio.h>
#include "struct_passing.h"
void f4(thing_t *bob) {
bob->x = "changed";
}
void f3(thing_t *bob) {
f4(bob);
printf("inside f3 x: %s\n", bob->x);
}
void f2(thing_t *bob) {
f3(bob);
}
void f1(thing_t *bob) {
f2(bob);
}
int main(void) {
thing_t foo;
foo.x = "same";
printf("Before: %s\n", foo.x);
f1(&foo);
printf("After: %s\n", foo.x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它在ubuntu上的**gcc版本4.4.3上按预期工作
$ gcc -o struct struct_passing.c
$ ./struct
Before: same
inside f3 …Run Code Online (Sandbox Code Playgroud) 我刚刚从char数组转移到std :: string而且我已经遇到了一个问题,我可能正在做一些非常愚蠢的事情,随意嘲笑:
int main()
{
string * p = new string;
memset(p, 0, sizeof(string));
expected_exepath(p);
cout << p->data;
delete p;
}
Run Code Online (Sandbox Code Playgroud)
错误在p-> data中,它表示"绑定到函数的指针只能用于调用函数".p是std :: string,所以我不明白为什么它认为我正在尝试叫一个功能.
我是新手,所以我知道这可能很简单.
我有这样的功能
void GroceryList::addRecord(char* itemName, char* itemType, char rating){
//do some code;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法创建传递给函数的正确参数.
I've tried something like
void main() {
string itemName;
cin >> itemName;
string itemType;
cin >> itemType;
string rating;
cin >> rating;
gradeBook.addRecord(itemName, itemType, rating);
}
Run Code Online (Sandbox Code Playgroud)
我没想到它会起作用,因为函数期望char*但我不能在我的生活中弄清楚如何将用户输入到我可以传递给函数的变量中.我一直在寻找13个小时尝试我能找到但到目前为止没有运气的东西.
试图获取一个文件名:
procedure TSomeClass.GetFileName(AData : string) : string;
var
p : pchar;
begin
p := pchar(AData);
while not (p^ in ['/', '&', '#', ':']) do
inc(p);
result := p;
end;
Run Code Online (Sandbox Code Playgroud) 这是我一直试图运行的简单而简短的代码:
#include <stdio.h>
int const SIZE = 5;
void a(int *arr);
int main(){
int arr[5] = {1,2,3,4,5};
a(arr);
return 0;
}
void a(int *arr){
int *i;
for (i=arr; i<&a[5]; i++)
printf("%d",*arr[i]);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误/警告:
main.c: In function ‘main’:
main.c:15: error: variable-sized object may not be initialized
main.c:15: warning: excess elements in array initializer
main.c:15: warning: (near initialization for ‘arr’)
main.c:15: warning: excess elements in array initializer
main.c:15: warning: (near initialization for ‘arr’)
main.c:15: warning: excess elements in array initializer
main.c:15: warning: …Run Code Online (Sandbox Code Playgroud) 我有一个困难时期*,并&在下面的代码:
声明变量和调用函数:
SDL_Event event;
myfunc(event);
Run Code Online (Sandbox Code Playgroud)
功能:
void MyApp::myfunc(SDL_Event* event) {
while ( SDL_PollEvent(&event) ) {
if (event.type == SDL_QUIT) {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器:错误:没有匹配函数来调用'MyApp :: myfunc(SDL_Event&)'注意:候选者是:void MyApp :: myfunc(SDL_Event*)|
我做错了什么,如何解决?
我有以下代码:
typedef unsigned char some_type[6];
int main() {
some_type some_var1;
some_type some_var2;
some_var1 = some_var2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我收到以下错误消息:
incompatible types when assigning to type 'some_type' from type 'unsigned char *'
Run Code Online (Sandbox Code Playgroud)
为什么是这样?两个变量都是完全相同的类型?我能做些什么才能让它发挥作用?我无法更改typedef,因为它是我正在使用的API的一部分.